QBASIC для начинающих
методическая разработка по информатике и икт (9 класс) на тему

Мокрушина Альбина Евгеньевна

Учебник и задачник по программированию

Скачать:

ВложениеРазмер
Microsoft Office document icon uchebnik.doc367.5 КБ
Microsoft Office document icon SBORNIC.doc226.5 КБ

Предварительный просмотр:

Мокрушина А.Е.

г. Нижний Новгород


ГЛАВА 1 . “ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ ПРОГРАММИРОВАНИЯ BASIC”

§1. Происхождение языка.

В прошлом веке один английский миссионер, желая облегчить контакт с туземным населением, выделил из английского языка самую простую и распространенную его часть, содержащую около 300 слов и почти не имеющую грамматики. Это подмножество языка, названное Basic English, действительно оказалось весьма простым для усвоения и потому вскоре завоевало популярность не только среди туземцев, но и среди эмигрантов.

Подобную цель создания средства для расширения и облегчения контакта, только не между людьми, а между людьми и компьютером, поставили перед собой сотрудники Дартмундского колледжа Дж.Кемени и Т.Курц, разработавшие в 1964 году язык BASIC (от англ. Beginner’s All — purpose Symbolic Instructiоn Code — многоцелевой язык символических команд для начинающих). Благодаря своей простоте по сравнению с другими языками программирования, а главное, способности работать в диалоговом режиме с пользователем, язык BASIC уже в 1970 году, получив поддержку таких мощных фирм, как GENERAL ELECTRIC и IBM, практически стал одним из самых популярных языков программирования для персональных компьютеров.

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

Современная версия языка — QBASIC для IBM PC — позволяет профессионально использовать все современные методы и технологию программирования.

§2. Алфавит языка.

1) Латинские буквы — используются для набора команд языка и идентификаторов.
ВНИМАНИЕ!  Команды и имена величин записываются только латинскими буквами и, хотя некоторые буквы обоих алфавитов схожи по написанию (А,О,К,М), компьютер их различает, так как они имеют разный числовой код.

 2) Буквы русского алфавита — используются для вывода сообщений и комментариев.

3) цифры от 0 до 9.

4) Знаки арифметических действий:  

сложение

+

умножение

*

вычитание

-

деление

/

5) Знаки отношений:

меньше

<

меньше или равно

<=

больше

>

больше или равно

>=

равно

=

не равно

< >

6) Специальные знаки:

точка

.

запятая

,

двоеточие

:

точка с запятой

;

скобки

(  )

кавычки

восклицательный знак

!

вопросительный знак

?

знак доллара

$

процент

%

коммерческое “И”

&

апостроф

§3. Величины.

1) Числовые константы.

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

Например: 1,45  1.45
                         0,5
 .5

Вещественное число можно записать двумя способами:
а) Число записывается с десятичной точкой, за которой должна следовать хоть одна цифра. Такая запись числа называется представлением числа с фиксированной точкой.
б) Десятичная дробь записывается как целое или вещественное число, умноженное на целую степень числа десять. Это показательная форма записи с плавающей точкой.

Например: 5е+2 5*102 5*100=500
                           3е-3
3*10-3 3*0,001=0,003
                           .25е+3
0,25*103 0,25*1000=250
                            .5е+2
0,5*102 0,5*100=50

8) Символьные константы.

Символьные константы записываются в виде последовательности символов, заключенных в кавычки. Длина символьной величины (т.е. количество символов внутри кавычек)  в разных версиях языка и на разных компьютерах варьируется от 1 до 32767 символов.

9) Переменные.

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

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

Например:  В, А1, СDX, WORD$, X%, ас —  верно.
                          1В, $АВС, %Х — неверно.

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

Тип переменной  (например, строковый, целый, вещественный, длинный целый, вещественный двойной точности)  определяется множеством значений, которые может принимать данная переменная.

После имени символьной переменной ставят знак $, а после имени целочисленной — знак %. Если имя не содержит этих знаков, то по умолчанию она считается вещественной.

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

 Дополнительная информация:Тип величины можно описать суффиксами ( $, % и т.д.) и  специальными операторами  —
DEF  тип   список переменных . Например,  целочисленные переменные программы можно описать следующим образом: DEF INT а, b, c

После выполнения этого оператора переменные а, b, c будут считаться целочисленными.

В случае описания символьных переменных в начале программы можно написать:  
DEF STR  x, y       — переменные x и y программа будет считать символьными.

§4. Выражения.

Все выражения в программе должны быть записаны по правилам языка:

а) Выражения должны быть записаны в виде линейной цепочки символов. Например: а0 а0                
                 х
10х10
       б) Нельзя опускать знаки операций.
Например: 3а
3*а
                 а(в+с)
а*(в+с)
в) Операции и функции записываются в соответствии с таблицей:

Математическая
запись

Запись на QBASIC’е

Смысловое
значение

|х|     модуль х

abs(x)

|х|=  х, если х>=0

       -x, если x<0

   кв.корень из х

sqr(x)

 арифметич. корень из числа х (x>=0)

аb       а   в степени b

a^b

степенная функция

sin x    синус х

sin(x)

тригонометрическая функция

cos x   косинус х

cos(x)

тригонометрическая функция

знак числа

sgn(x)

              1, x>0

sign x= 0, x=0

             -1< x<0

tg x    тангенс х

 tan(x)

тригонометрическая функция

arctg x  арктангенс х

atn(x)

тригонометрическая функция

ln x  нат.логарифм от х

log(x)

логарифмическая  функция

Дополнительная информация:

INT(x) — наибольшее целое, меньшее х;

CINT(x) — округление по математическим правилам;

FIX(x) — целая часть числа х;

x mod y — остаток от деления х на у;

х \ у — целочисленное деление х на у.

 Задача.

Переведите выражения в линейную форму.

1) sqr(x1^2+x2^2)

2) (a+b)/(c+d)

3) (a+b)/c+d

ГЛАВА 2.  “ОПЕРАТОРЫ ЯЗЫКА. ЛИНЕЙНЫЕ  ПРОГРАММЫ.”

§ 5 Оформление программ.

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

После служебного слова, означающего название оператора, обязательно ставится пробел.

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

Если на одной строке записывается несколько операторов, то их отделяют друг от друга двоеточием. Набор строки на компьютере заканчивается нажатием клавиши {Enter}. Заканчивается программа оператором конца программы — END.

Элементы команды можно разделять произвольным количеством пробелов.  Допускаются также и пустые строки. QBASIC сам форматирует строки — переводит строчные буквы служебных слов в прописные и расставляет пробелы.

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

Например:

FOR  K=1 TO 10 STEP 1

      PRINT K

      PRINT K^2

NEXT K

Любую команду в программе можно снабдить поясняющим текстом —  комментарием, который начинается служебным словом REM.

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

Например: REM Это моя первая программа.

Служебное слово REM можно заменить знаком апостроф :

‘ Это моя первая программа.

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

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

§ 6 Оператор присваивания LET.

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

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

ОБЩИЙ ВИД:  

          LET  имя переменной = выражение

В современных версиях языка разрешается опускать служебное слово LET, таким образом оператор присваивания примет вид:

          Имя переменной = выражение

Работа команды делится на два этапа:

1 этап  Вычисляется значение выражения, стоящего в правой части команды.

2 этап  Полученное значение присваивается переменной, имя которой стоит в левой части команды. Если такой переменной еще нет, то компьютер заводит ее и помешает значение туда.

ВНИМАНИЕ! В команде присваивания типы переменной и выражения должны быть согласованы: нельзя числовой переменной присваивать символьное значение и наоборот.

Команду присваивания нельзя отождествлять со знаком равенства.

Читать команду  А=5 следует таким образом: “Переменной А присвоить значение 5.” или просто “А присвоить 5”.

Команду А=А+1 следует понимать следующим образом. Выше описаны два этапа работы команды присваивания: на первом этапе вычисляется значение А+1. Для компьютера А — это не буква, а переменная с именем А, в которой лежит какое-то значение. Таким образом компьютер к этому значению прибавит 1. Полученное число 6 на втором этапе будет помещено в переменную,  имя которой записано слева, т.е. в переменную А. Старое значение будет заменено новым.

При  записи выражений в команде присваивания необходимо помнить о приоритете операций:

1) возведение в степень и действия в скобках.

2) умножение и деление.

3) сложение и вычитание.

Задача 1.

Какие значения последовательно будет получать переменная Х при выполнении следующих команд

Х=10                                              

Х=Х+5

Х=Х/3

Х=Х*2+1?

Решение:

Х=10

Х=Х+5     Х=10+5=15  Х=15

Х=Х/3       Х=15/3=5 Х=5

Х=Х*2+1   Х=5*2+1=26  Х=26

Задача 2.

Определите, какие значения будут присвоены переменным А, В и С в результате выполнения действий.

а) A$=“РАДИО”

    В$=“СЛУШАТЕЛЬ”

    С$=А$+В$

Решение:    С$=“РАДИО”+”СЛУШАТЕЛЬ”=“РАДИОСЛУШАТЕЛЬ”

б) А=5

    В=А+4

    С=А+В

Решение: А=5

                В=5+4=9  В=9

                С=5+9=14   С=14

Задача 3.

Найдите ошибку в программе:

а) А=5

    В$=6  — Ошибка! Символьной переменной присваивается числовое значение.

б) А=13

    В$=“число”

    С=А+В$ — Ошибка! Числовой переменной присваивается сумма переменных разных типов.

Задача 4.

Запишите команды  в результате выполнения которых значения переменных А и В поменяются.

Решение: Эту задачу можно решить двумя способами — с помощью вспомогательной переменной и с помощью встроенной функции SWAP.

Рассмотрим первый способ:

X=A :REM запомнили значение переменной А

A=B :REM переменной А присвоили значение переменной В

B=X :REM  В присвоили Х, т.е. значение переменной А.

Второй способ:

Обмен значений переменных с помощью оператора            SWAP переменная 1 ,переменная 2

Например, SWAP  А, В.

§ 7 Оператор PRINT.

Оператор PRINT осуществляет вывод на экран алфавитно-цифровой информации и результатов вычислений.

ОБЩИЙ ВИД ОПЕРАТОРА PRINT:

               PRINT   список вывода

В списке вывода могут быть как числовые и строковые константы, так и имена переменных.
Например:

ОПЕРАТОР

ДЕЙСТВИЕ

РЕЗУЛЬТАТ

PRINT 15

Выводит на экран число 15

15

PRINT “число”

Выводит на экран текстовую константу “число”

число

PRINT  А

Выводит на экран значение переменной А(при А=5)

5

PRINT  10*3.1

Выводит значение выражения

31

Список вывода может содержать смешанные данные, т.е. и константы, и величины. Данные в списке могут быть разделены  “;” или “,”. В конце списка так же может стоять один из этих знаков.

Чтобы элементы списка  вывести подряд в одной строке,  в операторе PRINT  их разделяют запятыми или точкой с запятой. Если же этот знак стоит в конце списка вывода, то следующая команда PRINT продолжит вывод в этой же строке.

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

Пример:

А=5

PRINT  “КОМПЬЮТЕР”

PRINT  “А=“;А

PRINT  А*10;А*100;А*1000

PRINT  2,4,6;

PRINT  “-- четные числа”

КОМПЬЮТЕР

А=5

50  500  5000

2               4                  6-- четные числа

                14                     14

§ 7.1 Форматированный вывод чисел на печать PRINT USING.

Знак “#” указывает сколько позиций при печати следует отвести под число.

Например, PRINT USING  ”# # # #”; 5;34

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

534

Таким образом, числа при печати выравниваются по правому краю отведенного места.

Также можно указывать количество знаков после десятичной точки при выводе вещественных чисел.

Например, PRINT USING  “##.##”;57.389;2.5

 В этом случае на экран будет выведено число 57.39, т.е. исходное число будет округлено, а к дробной части числа 2.5 наоборот, будет приписан еще один знак.

57.39  2.50

 

ВНИМАНИЕ!  В случае, если будет задан неверный формат числа, машина выдаст перед числом знак “%”.

Например, PRINT USING  “# # #”;34578

                 PRINT USING  “#. # #”;15,7

%34578

%15.70

§ 7.2 Управление выводом на печать LOCATE.

Выше мы рассмотрели возможность выводить информацию как построчно, так и в одной строке. Оператор LOCATE позволяет вывести данные в любом месте экрана.

ОБЩИЙ ВИД:

           LOCATE   РУ, РХ                                

где РУ — номер строки (1<=РУ<=24),

 РХ — номер столбца (1<=РХ<=80).

Оператор LOCATE устанавливает курсор для печати в строку РХ и столбец РУ.

Например, LOCATE  5,4: PRINT “QBASIC”

Результат:                                  4

                                        5           QBASIC


Задача 1.

Вывести в третьей, четвертой и пятой строках, в третьем, шестом и девятом столбцах слова “июнь”, “июль”, “август”.

CLS

LOCATE 3,3 :PRINT “ИЮНЬ”

LOCATE 4,6 :PRINT “ИЮЛЬ”

LOCATE 5,9 :PRINT “ АВГУСТ”

END

§ 8 Ввод данных с клавиатуры INPUT.

Этот оператор служит для ввода числовой и текстовой информации в память машины.

ОБЩИЙ ВИД :

           INPUT   список ввода

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

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

Например, INPUT   А, В        

? 5, 7

Выполняя этот оператор, компьютер выведет на экран знак “?” и будет ожидать ввода. Введем с клавиатуры, допустим, числа 5 и 7 через запятую и нажмем клавишу ENTER. Число 5 поступит в переменную А, а  число 7 — в В.

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

Например, INPUT  “Введите два числа”; А, В

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

Введите два числа?

Задача 1.

Подсчитать среднее арифметическое трех чисел, введенных с клавиатуры.

CLS                                                                

REM ввод значений в переменных А, В, С

INPUT “Введите первое число-”; A                  

INPUT “Введите второе число-”;B                  

INPUT “Введите третье число-”;C                    

REM подсчет ср.арифм. и вывод на печать

SA=(A+B+C)/3                                                  

PRINT “Среднее арифметическое равно  ”;SA  

END

При значениях А=1, В=2, С=3 получим следующий результат:

Введите первое число-?1

Введите второе число- ?2

Введите третье число- ?3

Среднее арифметическое равно 2

Задача 2.

Разместите введенное с клавиатуры слово в 20 столбце и в 10 строке текстового экрана.

Решение:

INPUT “ “; A$

LOCATE  10,20: PRINT A$

END

§ 8.1 Операторы DATA  и READ .

Задание значений величин в программе может осуществляться тремя способами:

1) присвоение с помощью оператора присваивания,

2) ввод значений с клавиатуры с помощью оператора INPUT,

3) программное задание блока данных с последующим считыванием.

С первыми двумя способами мы ознакомились выше. Последний способ применяется в тех случаях, когда объем данных достаточно велик, а вводить их с клавиатуры неудобно. Для этого в программе создают блок данных — список констант, записанных в специальном операторе DATA.

ОБЩИЙ ВИД:

           DATA   список констант

где в списке констант — числовые или символьные константы, отделяемые друг от друга запятыми.

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

Например,  DATA  5, 7.3, QBASIC, “  PROGRAM:”

Оператор DATA относится к невыполняемым операторам, т.е. может быть записан в любом месте программы. В одной программе может быть несколько операторов DATA.

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

ОБЩИЙ ВИД :

      READ   список переменных

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

Оператор READ присваивает первое значение из блока данных первой переменной списка величин, второе — второй переменной и т.д.

Если  в дальнейшем в программе встретится еще один оператор READ, то считывание данных будет происходить со следующего свободного, т.е. не считанного, значения из DATA.

Например,     DATA 1,2,3,4,5

                          READ A, B, C

                          READ X, Y

В результате в переменным А, В, С, D, X, Y  будут помещены значения:

       A        B       C            X      Y

        1        2        3            4        5      

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

Например,    DATA  3, “Дом №5”, 34.4

                     READ  A$, B$, C

В результате в переменным А$, В$, С  будут помещены значения:

A$                  B$                   C

3                    Дом№5           34.4

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

ВНИМАНИЕ!

Число переменных в операторах READ не должно превышать количество констант в списке операторов DATA , иначе компьютер выдаст сообщение об ошибке “ВНЕ ДАННЫХ”. Список констант в DATA не может содержать арифметических выражений.

Для того, чтобы начать считывание данных из блока сначала, используют оператор RESTORE. RESTORE возвращает указатель с текущего значения на начало списка.

Например:

ПРОГРАММА.                                                ПЕРЕМЕННЫЕ

DATA  10,20,30                                                A1               A2

DATA 1,2,3                                                        10               20

READ A1,A2                                                  

RESTORE                                                         B1     B2     B3     B4   

READ B1,B2,B3,B4                                          10      20     30      1

READ B5,C$                                                    B5      C$

                                                                             2         3


§ 9. Функции символьного переменного.

Как уже говорилось выше, символьная величина — это цепочка символов, заключенная в кавычки, длина которой не более 255 символов. Имя строковой величины заканчивается знаком “$”(или описывается в операторе DEFSTR).

Например, А$ — читается “А символьное”.

Основными операциями над строками являются сцепление слов и выделение подслов.

Сцепление (конкатенация) символьных величин осуществляется знаком “+”. Например,

                 PRINT  “ПРО”+”ГРАММ”+”МА”              

ПРОГРАММА

                 РЕЗУЛЬТАТ:

 

Для выделения подслов предусмотрены специальные функции:

MID$(S$, K,L), где S$ — символьная величина,

                             K — натуральное число,

                             L — натуральное число.

Эта функция копирует из S$  L символов, начиная с символа с номером К.

Например, MID$(“ИНФОРМАТИКА”, 3,5)  — скопировать из строки “ИНФОРМАТИКА” 5 символов, начиная с символа 3 ФОРМА.

Дополнительная информация:

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

Например, A$=“ЛОГ“

                      МID$(A$, 2)= “A”

                      PRINT A$

Результат:

  LEFT$(S$,L), где S$ — символьная величина,

                              L — натуральное число.

Эта функция копирует из S$  L символов слева.

Например, LEFT$(“ЛЕСТНИЦА”, 3) — скопировать из слова “ЛЕСТНИЦА” 3 символа слева  ЛЕС.

RIGHT$(S$,L), где S$ — символьная величина,

                              L — натуральное число.

Эта функция копирует из строковой величины L символов справа.

Например, RIGHT$(“ФАСОЛЬ”, 4) — копирует из слова “ФАСОЛЬ”   cимвола справа  СОЛЬ.

Для преобразования величин служат функции:

LEN(S$) — преобразует строку S$ в число, равное длине строки (т.е. считает длину строки).

Например,      PRINT  LEN(“ФОРМА”)

                       результат:    

5

INSTR(N, A$, S$) — определяет содержит ли строка А$ строку S$. Если не содержит, то значение функции будет равно 0, в противном случае значение функции равно номеру позиции, с которого начинается срока S$ в строке A$.
N —   это номер символа, с которого начинается поиск.

Например:

PRINT  INSTR(1, “ПРОГРАММИРОВАНИЕ”, “МИР”)

8

   результат:  

 PRINT  INSTR(1, “ПРОГРАММИРОВАНИЕ”, “ПРОГРАММА”)

0

   результат:  

Дополнительная информация:

INKEY$ — считывает код клавиши. нажатой в данный момент. Как работает эта функция будет рассказано ниже, в §11.4.

VAL(S$) — преобразует цепочку цифровых литер в число.

Например,  PRINT  VAL(“12”)+  VAL(“3”)            12+3=15.

15

Результат:

STR$(X) — преобразует число Х в цепочку цифровых литер.

Например, PRINT STR$(54) + STR$(65)          

5465

Результат:

Задача 1.

Путем копирования и склейки выделить из слова “АЛГОРИТМ” слова “РИТМ”, “ГОРА”,”РОГ”.

Примечание: Для удобства  буквы в слове лучше пронумеровать.

1    2   3   4   5   6    7   8

А   Л   Г   О   Р   И   Т   М

CLS

A$=”АЛГОРИМТ”

PRINT   RIGHT$(A$, 4)  РИТМ

PRINT  MID$(A$, 3, 3)+LEFT$(A$,1)  ГОРА

PRINT MID$(A$, 5, 1)+ MID$(A$, 4, 1)+ MID$(A$, 3, 1)  РОГ

END

Задача 2.

Определите, не выполняя программы, что будет изображено на экране после ее выполнения.

а)  CLS                                                                1   2   3  4  5   6    7   8

     S$=“ОПЕРАЦИЯ”                                     О  П  Е  Р  А  Ц  И  Я

     A$= MID$(S$, 2, 3)+LEFT$(S$,1) :     ‘ ПЕР+О   ПЕРО

     PRINT  A$       :           ‘ вывод A$, то есть слово “ПЕРО”

     END

б)   DATA  1, 2, 3, 4, 5

      READ a$, b$, c$, d, e, f

      PRINT a$+b$+c$

      PRINT d+e+ f

Примечание: переменные a$, b$, c$ — символьные, поэтому числа 1, 2 и 3 считываются как символы и на экране появится строка “123”. Переменные d, e, f — вещественные, а значит результатом работы оператора PRINT d+e+ f будет число 12.


§ 10.  Операторы  графики. Графический режим.

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

Если вы  работаете только в текстовом режиме (N=0), его объявлять необязательно, он устанавливается по умолчанию. Остальные режимы графические, отличающиеся только разрешением экрана.

Например, SCREEN 7 — с разрешением 320 на 200 пикселей;

SCREEN 9 — с разрешением 640 на 350 пикселей;

SCREEN 12 — с разрешением 640 на 480 пикселей.

В пособии будет рассмотрен только режим SCREEN  9.

 Рассмотрим ситему координат экрана в графическом режиме SREEN  9 :

начало координат — левый верхний угол экрана, ось ОХ направлена горизонтально вправо, а ось OY — вертикально вниз.

          0,0                                                 640

                                                                       X

                           xt               yt

                                             (xt,yt)

 

     350

      Y

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

SCREEN 7 — 25 строк  по 40 символов;

SCREEN 9 — 25(43) строк  по 80 символов;

SCREEN 12  — 30(60) строк  по 80 символов;

 §10.1 Работа команды СOLOR.

При выводе изображения на экран можно задавать фон, т.е. цвет самого экрана, и цвет изображения линий. Фон и цвет изображения обозначается целым числом, которому соответствует определенный цвет. Цвет фона задается специальной командой СOLOR, а цвет изображения либо задается командой СOLOR, либо непосредственно в команде, выводящей на экран какую-либо фигуру.

ОБЩИЙ ВИД:

                   SCREEN  7

                   СOLOR  C, FON  

C и FON  изменяются от 0 до 15 в соответствии с таблицей:

С

ЦВЕТ

С

ЦВЕТ

0

ЧЕРНЫЙ

8

СЕРЫЙ

1

ГОЛУБОЙ

9

СВ.-ГОЛУБОЙ

2

ЗЕЛЕНЫЙ

10

СВ.-ЗЕЛЕНЫЙ

3

БИРЮЗОВЫЙ

11

СВ.-БИРЮЗОВЫЙ

4

КРАСНЫЙ

12

РОЗОВЫЙ

5

СИРЕНЕВЫЙ

13

СВ.-СИРЕНЕВЫЙ

6

КОРИЧНЕВЫЙ

14

ЖЕЛТЫЙ

7

БЕЛЫЙ

15

ЯРКО-БЕЛЫЙ

Например, команда СOLOR  2, 8 устанавливает цвет экрана 8 — серый, а цвет изображения 2 — зеленый.

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

§ 9.3 Операторы рисования точек.

PSET(X,Y), C — рисует точку с координатами (Х,У), цветом С.

Например, PSET(10, 10),15 — рисует точку с координатами (10,10) ярко-белым цветом.

Результат:                                       10

                           

                                            10

PRESET(X,Y) — “гасит” (рисует цветом фона)  точку с координатами (Х,У).

Например, чтобы “погасить” точку, которая была указана в предыдущем примере, нужно написать оператор : PRESET(10,10).

§ 10.2 Абсолютные и относительные координаты.

Координаты, которые указывают местоположение точки, учитывая систему координат экрана, называются абсолютными координатами. Например, PSET(100,120) — означает, что на экране появится точка на 100 пикселей правее и 120 пикселей ниже левого  верхнего угла, т.е. начала координат экрана.

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

Кроме абсолютных в QBASIC’е используются еще и относительные координаты. Эти координаты показывают величину перемещения ТПС. Чтобы нарисовать новую точку, используя относительные координаты, нужно использовать ключевое слово STEP(X,Y), где Х и У — смещение координат относительно ТПС.

Например, PSET STEP(-5,10)  — при этом появится точка, положение которой будет левее на 5 и ниже на 10 точек относительно точки последней ссылки.  То есть, если точка последней ссылки имела координаты, например, (100,100), то получится точка с координатами (95,110).

§ 10.3 Рисование линий и прямоугольников.

LINE(X1,Y1)-(X2,Y2),C  — рисует отрезок, соединяющий точки (Х1,У1) и (Х2,У2), цветом С.

Например, LINE(5,5)-(10,20),4

Результат:                              5      10

                         

                                       5

                                    20

Если не указывать первую координату, то будет проведен отрезок из ТПС в точку с координатами (Х2, У2).

LINE(X1,Y1)-(X2,Y2), C, В — рисует контур прямоугольника с концами диагонали в точках (Х1,У1) и (Х2,У2), С — цвет, В — маркер прямоугольника.

Например, LINE(5,5)-(20,20), 5, В

Результат:                              5                           20

                               5

                               20

Если вместо маркера В указать ВF, то будет нарисован закрашенный прямоугольник (блок):

                            LINE(X1,Y1)-(X2,Y2),C, BF

Например, LINE(5,5)-(20,20),5, BF

Результат:                              5                              20

                   

                                  5

 

                              20

§ 10.4 Рисование окружностей, элипсов и дуг.

CIRCLE(X,Y), R, C — рисует окружность с центром в точке (Х,У), радиусом R, цветом С.

Например, CIRCLE(50,50), 10, 7

Результат:  

                                           50

                  40

                 50

                  60

 CIRCLE(X,Y), R, C, f1, f2 — дуга окружности, f1 и f2 значения углов дуги в радианах от 0 до 6.2831, определяющие начало и конец дуги.

                                                   3.14                          0

Например, CIRCLE(50,50), 10, 7, 0, 3.14

Результат :                                       40        50       60

                   

                              50

Если перед значением  угла поставить знак “-”, то от центра к концу дуги будет проведен радиус.

Например, CIRCLE(50,50), 10, 7,-0, -3.14

                                                           40      50      60

                 

                               50  

CIRCLE(X,Y), R, C, , , е — элипс, с центром в точке(Х,У), радиусом R, е -- отношение вертикальной оси к горизонтальной.

Например, CIRCLE(50,50), 20, 15, 7, , , 1/2

Результат:                                  30        50        70          

                                     40

                                     50

                                      60                       60

В случае необходимости, после параметра С можно указать значения углов дуги элипса f1 и f2.

PAINT(X,Y), C, K — закрасить цветом С  фигуру, нарисованную цветом К, (Х,У) — точка, лежащая внутри фигуры. Если цвет контура совпадает с цветом закраски, то указывают только один цвет: PAINT(X,Y), C

Например, надо закрасить окружность CIRCLE(150,50), 40, 5  цветом 4. Для этого надо выполнить оператор PAINT(150,50), 4, 5  , т.к. центр окружности точно лежит внутри закрашиваемой фигуры, мы использовали его как внутреннюю точку.

§ 10.5 Решение задач.

Задача 1.

Нарисовать четыре точки, которые лежат на одной горизонтальной прямой на расстоянии 20 пикселей друг от друга. Точка последней ссылки имеет координату (15, 20).

Решение:                                        ПРИМЕЧАНИЯ.

SCREEN 9: COLOR 5,15 :REM  графич. режим, фон 5, цвет 15

CLS                          :REM        очистка экрана

PSET(15,20)            :REM      рисует точку с координатами (15,20)

PSET STEP(20,0)    :REM      рисует точку со смещением
       PSET STEP(20,0)     :REM относительно последней на 20

PSET STEP(20,0)     :REM пикселей по оси ОХ.

END

Результат:                         15       35       55     75

                   

                                 20         .         .         .         . 

Задача 2.

Нарисовать три окружности, центры которых лежат на одной горизонтальной прямой на расстоянии 30 пикселей друг от друга. Радиусы окружностей равны 20, центр первой окружности совпадает с центром экрана.

Решение.

SCREEN 9                                                   120    150      180

CLS

CIRCLE STEP(0, 0), 20, 15            100

CIRCLE STEP(30, 0), 20, 15

CIRCLE STEP(30, 0), 20, 15

END

Задача 2.

Построить четырехугольник с вершинами (10,15), (30,25), (30,5) и (20,0).

Решение:

 SCREEN 9:CLS

LINE (10,15)-(30,25), 5

LINE — (30, 5),5

LINE — (25,0), 5

LINE — (10,15), 5

END

РЕЗУЛЬТАТ:                              5    10    20    25    30    

                         

                                      5

                                     

                                    15

                                     

                                    25

Задача 3.

Напишите программу рисования произвольной картинки.

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


Например,

                                  20             40   50                  80

    10

    30

    50

    70

Решение:

SCREEN 9: COLOR 10, 0: CLS

LINE (20,30) - (80,70), 10, B   :REM  СТЕНА

LINE (20,30) - (50,10), 10       :REM КРЫША  

LINE  - (80,30), 10                  :REM   КРЫША

CIRCLE (50, 50), 10, 10          :REM ОКНО

PAINT(50, 50), 2, 10               :REM  ЗАКРАШЕНО ЗЕЛЕНЫМ ЦВЕТОМ  

END

 

Рассмотрим решение этой задачи в общем виде. Обозначим высоту  домика через H, длину через L, высота крыши будет равна L/2. Пусть левый верхний угол стены домика имеет координату (x,y),  тогда  координаты фигур, составляющих домик будут выглядеть следующим образом:

                                    X                X+L/2               X+L

Y-L/2

    Y

   Y+H/2


        Y+H

Оформив задание координат и размеров домика через INPUT, каждый раз мы будем получать рисунки разного размера и в разных местах экрана.

Программа примет вид:

CLS

INPUT “X=“;X

INPUT “Y=“;Y

INPUT “H=“;H

INPUT “L=“;L

SCREEN 9: COLOR 10, 0: CLS

LINE (X,Y) - (X+L,Y), 10, B         :REM  СТЕНА

LINE (X,Y) - (X+L/2,Y-L/2), 10     :REM КРЫША  

LINE  - (X+L,Y), 10                     :REM   КРЫША

CIRCLE (X+L/2, Y+H/2), 10, 10   :REM ОКНО

PAINT(X+L/2, Y+H/2), 2, 10        :REM  ЗАКРАШЕНО
       END                                                  : REM ЗЕЛЕНЫМ ЦВЕТОМ  

ГЛАВА 3.  ЦИКЛИЧЕСКИЕ СТРУКТУРЫ.

§ 11. Понятие цикла.

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

Задача .

Вывести на экран квадраты первых N натуральных чисел.

Разберем решение задачи, например,  для N=5.

CLS

PRINT 1^2

PRINT 2^2

PRINT 3^2

PRINT 4^2

PRINT 5^2

END

Для небольших значений N написать и набрать эту программу не составит труда — можно воспользоваться копированием и вставкой строк, а потом только исправить числа. Но представьте себе в какого “монстра” превратится эта программа, если нам придется писать ее для N=1000 !

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

Таким образом при многократном повторении одних и тех же действий речь может идти о цикле. А что такое цикл? Когда Вы говорите о человеке — “зациклился”? Когда он много-много  раз говорит об одном и том же или делает одно и то же.

Итак,

ЦИКЛ — это многократное повторение одних и тех       же действий.

Цикл в общем виде должен содержать:

  1.  Установку начальных значений переменных цикла.
  2.  Тело цикла —  действия, повторяемые многократно.
  3.  Изменение переменных цикла.
  4.  Проверку условия окончания (продолжения) цикла.
  5.  В случае выполнения условия продолжения цикла, переход к пункту 2.

В данном пособии мы рассмотрим две циклические структуры — счетный цикл FOR ... NEXT  и цикл “пока”  WHILE ... WEND.

§ 11.1 Счетный цикл FOR...NEXT.

Общий вид:

FOR    счетчик = нач.знач .   TO    кон.значение     STEP     шаг

ТЕЛО  ЦИКЛА

NEXT       счетчик

где  счетчик — это имя переменной, изменяющейся в цикле;

       нач.значение и кон.значение — числовые константы;

       шаг изменения — числовое значение, определяющее величину изменения переменной цикла при последующем исполнении.

Служебное слово FOR называют заголовком цикла, NEXT — концом цикла.

Оператор FOR...NEXT выполняется следующим образом:

1) Переменной цикла присваивается начальное значение.

2) Проверка допустимости значения переменной цикла, т.е. не превышает ли оно конечного Если не превышает, то переход к п.3, иначе — конец цикла и переход на оператор, следующий за оператором NEXT.

3) Выполняются операторы тела цикла.

4) Переменная цикла получает новое значение, измененное на величину шага.

значения.

Итак, как же должна выглядеть наша программа?

Так как число n заранее неизвестно, используем ввод с клавиатуры INPUT.

CLS                                :REM  Очистка экрана

INPUT “n=“;N                  :REM  Ввод числа n пользователем

FOR I=1 TO n STEP 1     :REM   Организация цикла

  PRINT I^2                      :REM  Тело цикла

NEXT I                            :REM Конец цикла

END

 ПОЯСНЕНИЕ: I — переменная цикла, которое будет изменяться от 1 до n.                        Тело цикла — вывод на печать квадрата переменной цикла.

§ 11.2 Вложенные циклы.

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

1) Переменные циклов должны иметь разные имена.

2) Сначала должен быть закрыт внутренний цикл, а потом внешний.

Например, нижеприведенная программа выводит на экран таблицу умножения:

FOR I=1 TO 9 STEP 1

.   FOR J=1 TO 9 STEP 1

.   . PRINT I; ”*”;J;”=“;I*J

.   NEXT J: PRINT

NEXT I

§ 11.3 Решение задач.

Задача 1.

Нарисовать “Кремлевскую стену”:

0                                                                                                                                         х

Примечание: Возьмем высоту и ширину фрагмента 20 пикселей.

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

                 x,y-20    x+20,y-20  

                       x+10,y-10  

     

                  x,y           x+20,y     x+30,y

SCREEN 9:COLOR 7,2: CLS

 Y= 40

FOR X=1 TO 300 STEP 30

 LINE(X,Y)-(X,Y-20)

 LINE - (X+10,Y-10)

 LINE - (X+20,Y-20)

 LINE - (X+20,Y)

 LINE - (X+30,Y)

NEXT X

END

ПОЯСНЕНИЕ: Повторяющийся фрагмент, тело цикла, выделен на рисунке пунктирной окружностью. Расставив координаты на фрагменте, легко написать операторы, рисующие его. Осталось установить область изменения переменной цикла Х и шаг изменения. Так как длина фрагмента 30, то и шаг изменения будет 30, а Х изменяется в графическом режиме от 1 до 300. Значение Y можно выбрать самим.

Задача 2.

Подсчитать N! (факториал числа N), то есть произведение первых N натуральных чисел. Число N ввести с клавиатуры.

ПОЯСНЕНИЕ. Для подсчета нам необходимо завести переменную памяти, в которой будут “накапливаться” произведения. Пока она не задействована, ей присваивают значение 1. Переменная цикла будет последовательно принимать значения натуральных чисел от 1 до N. В теле цикла ячейке-”копилке” будут присваиваться произведения ее старого значения на переменную цикла.

CLS

INPUT “Введите натуральное число: ”;N

P=1

FOR I=1 TO N STEP 1

  P=P*I

NEXT I

PRINT  N; ”! = “; P

END

Задача 3.

Подсчитать сумму дробей вида  от 1 до n  (n ввести с клавиатуры).

ПРИМЕЧАНИЕ. В данной задаче нам тоже понадобится переменная-”копилка”, в которую мы будем складывать дроби. Первоначальное значение переменной должно быть равно 0. Округление произвести с помощью функции USING.

СLS

INPUT ‘“Введите натуральное число “; N

S=0

FOR I=1 TO N STEP 1

  S=S+ 1/(I+1)

NEXT I

PRINT “ Сумма дробей вида 1/(n+1) для n от 1 до “;N; “равна “;

PRINT  USING”##.##”;S

END

Результат для N=4:

Введите натуральное число? 4

Сумма дробей вида 1/(n+1) для n от 1 до 4 равна 1.28

Задача 4.

Написать программу переворачивающую слово.

Решение.

CLS

INPUT ‘“Введите слово: “;B$

A$=“”

FOR I= LEN(B$) ТО 1 STEP -1

  A$=A$+ MID$(B$, I, 1)

NEXT I

PRINT “Перевернутое слово —  “; A$

END

§ 11.4 Программирование динамического элемента.

Задача 1.

Нарисовать на графическом экране 15 прямоугольников с координатами диагонали (20,20) и (80, 100), закрашенных во все цвета от 1 до 15.

Решение:

CLS: SCREEN 9                          :REM  Графический режим

FOR I=1 TO 15 STEP 1               :REM  Заголовок цикла

  LINE (20,20) - (80, 100), I, BF  :REM Закрашенный пр-к цвета I

NEXT I                                        :REM Конец цикла

END

Пояснение: Переменная цикла I изменяется от 1 до 15 и является номером цвета в операторе LINE. Тело цикла — рисование закрашенного прямоугольника цветом I, с координатами диагонали  (20,20) и (80, 100).

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

Например: FOR I=1 TO 1000 STEP 1 : NEXT I

ВНИМАНИЕ! Имя переменной цикла не должно совпадать ни с каким другим именем программы!

Задержку вставляют в тело цикла, например, между операторами LINE и NEXT. Программа примет вид:

CLS: SCREEN 9                          :REM  Графический режим

FOR I=1 TO 15 STEP 1               :REM  Заголовок цикла

  LINE (20,20) - (80, 100), I, BF  :REM  Закрашенный пр-к цвета I

  FOR J=1 TO 300: NEXT J          :REM  ЗАДЕРЖКА

NEXT I                                        :REM  Конец цикла

END

Так же в качестве задержки используют оператор  SLEEP     N, где N — время в секундах.

Разберем задачу:

Задача 2.

Написать программу движения закрашенного прямоугольника слева направо по экрану.

Напишем алгоритм.

  1.  Нарисовать закрашенный прямоугольник в месте начала движения.
  2.  Нарисовать левую сторону прямоугольника цветом фона.
  3.  Нарисовать линию на 1 пиксел правее прямоугольника цветом прямоугольника.
  4.  Повторять пункты 2 и 3 до тех пор, пока прямоугольник не достигнет правого края экрана.

SCREEN 9: CLS

X=1: Y=10                :REM  установка левого верхнего угла пр-ка

LINE(X,Y) - (X+50, Y+30), 5, BF            :REM   пункт 1

FOR X=1 TO 320 STEP 1                          :REM   заголовок цикла

  LINE(X,Y)-(X,Y+30), 0                          :REM   пункт 2

  LINE(X+50,Y)-(X+50,Y+30), 5             :REM   пункт 3

  FOR J=1 TO 300: NEXT J                      :REM  задержка

NEXT X                                                      :REM  конец цикла

END

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

Задача 3.

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

Алгоритм.

  1.  Задать Rmax.
  2.  Нарисовать окружность единичного радиуса.
  3.  Нарисовать окружность на 1 пиксел больше.
  4.  Повторять пункт 3 до тех пор, пока радиус не станет больше Rmax.

SCREEN 9: CLS                               :REM  графический режим, очистка экрана

INPUT “Rmax=“;Rmax                       :REM  ввод Rmax

FOR R=1 TO Rmax STEP 1              :REM   пункты 2-4

  CIRCLE (150, 100), R, 9                  :REM  рисование окружности радиусом R

  FOR I=1 TO 300:NEXT I                  :REM  задержка

NEXT R                                            :REM конец цикла

END

§ 10.4 Цикл “ ПОКА ” — WHILE ... WEND.

Если в счетном цикле FOR ... NEXT число повторений фиксировано, то цикл WHILE ... WEND используют в том случае, если количество повторений заранее неизвестно, но известно условие, определяющее конец работы цикла.

ОБЩИЙ ВИД:

WHILE    УСЛОВИЕ

  ТЕЛО ЦИКЛА

WEND

Тело цикла выполняется до тех пор, пока условие истинно. Если условие сразу не выполняется, то тело цикла не выполняется ни разу.

Например:

INPUT X

WHILE X< 100

  X=X ^ 2

  PRINT X

WEND

Пояснение: Ввели с клавиатуры переменную Х. Пока Х<100, возводим ее в квадрат и печатаем.

Пусть Х=3. Получим:

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

Задача.

Вычислить квадратный корень числа, введеного с клавиатуры.

ПРИМЕЧАНИЕ: квадратный корень вычисляется только из неотрицательного числа, поэтому необходимо организовать в программе проверку ввода.

 CLS

INPUT “Введите число ”; N

WHILE N <0

PRINT “Ошибка! Повторите ввод!“

INPUT “Введите число ”; N

WEND

PRINT “Корень этого числа равен  “; SQR(N)

END

§ 10.5 Генератор случайных чисел.

RND — это встроенная функция, которая выдает случайное число в интервале от 0 до 1.

Для того, чтобы получить числа из интервала (А; В) нужно использовать формулу

                              (В-А)* RND + А.

При RND=0 число будет равно А, а при RND=1 — В.

Чтобы получить целое число на интервале (А; В) надо воспользоваться функцией INT, которая вычисляет целую часть числа:

                             INT((В-А+1)* RND+ А).

Дополнительная информация:

В некоторых версиях языка несколько выполнений одной и той же программы, использующей функцию RND, дают одну и ту же последовательность “случайных” чисел. Чтобы этого не происходило, надо в начале программы записать команду RANDOMIZE, которая инициализирует генератор случайных чисел. Выполняя этот оператор, компьютер выводит на экран запрос:
“Случайное число (-32768 до 32767)?”. В ответ пользователь должен ввести число, в зависимости от которого будет задана та или иная последовательность чисел.

Задача.

Выводить на экран окружности случайного цвета и центра, с радиусом 30 до нажатия клавиши.

случайный цвет от 1 до 15 — C= INT((15-1+1)*RND+1)= INT(15)*RND+1).

Случайный центр х от 30 до 300 — Х= INT((300-30+1)*RND+30)=
                                                         =INT(271*RND+30)

у от 30 до 170 — Y=INT((170-30+1)*RND+30)= INT(141*RND+30)

SCREEN 9: CLS

WHILE  INKEY$=“”

  C= INT(15)*RND+1)

  X=INT(271*RND+30)

  Y= INT(141*RND+30)

  CIRCLE(X,Y), 30, C

WEND

END

В этой программе использовалась встроенная функция INKEY$, которая уже упоминалась в §8. Рассмотрим ее подробнее.

Как уже было сказано, INKEY$ — функция, читающая из буфера клавиатуры символ нажатой клавиши. Если никакая клавиша не была нажата, INKEY$, не ожидая нажатия клавиши и не выводя каких-либо сообщений на экран, уносит из буфера пустую строку.

 Как было показано в предыдущей задаче, с помощью INKEY$ удобно создавать задержку в выполнении программы до нажатия клавиши или зацикливание.


ГЛАВА 4. УПРАВЛЯЮЩИЕ СТРУКТУРЫ.

§ 11 Ветвление.

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

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

§ 11.1 Оператор условного перехода.

ОБЩИЙ ВИД:

IF  < УСЛОВИЕ>  THEN  <Действие 1 >   ELSE < Действие 2>

Оператор условного перехода работает следующим образом:

ЕСЛИ условие выполняется,

ТО выполняем Действие 1 и выходим их оператора.

ИНАЧЕ выполняем Действие 2 и выходим.

Это полная форма оператора.

Например: Даны два числа. Вывести на печать квадрат большего из них.

РЕШЕНИЕ.

CLS

INPUT “A=“;A

INPUT “B=“;B

IF A>B THEN PRINT A^2 ELSE PRINT B^2

END

Оператор условного перехода можно записать в блочной форме:

IF      условие 1      THEN

    БЛОК ДЕЙСТВИЙ 1

ELSEIF      условие 2       THEN

    БЛОК ДЕЙСТВИЙ 2

........................................  

ELSE    

    БЛОК ДЕЙСВИЙ n

END        IF

В этом случае программа из предыдущего примера запишется так:

CLS

INPUT “A=“;A

INPUT “B=“;B

IF A>B THEN

    PRINT A^2

ELSE

    PRINT B^2

END IF

END

Оператор IF может не иметь конструкции ELSE. Такая форма оператора называется сокращенной.

IF  < УСЛОВИЕ>  THEN  Действие>

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

ЕСЛИ условие выполняется,

ТО выполняем Действие 1 и выходим их оператора.

ИНАЧЕ  выходим из команды.

В блочной форме:

IF             условие            THEN

    БЛОК ДЕЙСТВИЙ

END IF

Пример: Дано число. Заменить его значение на  корень арифметический из этого числа, если оно больше или равно нулю.

CLS

INPUT “А= “; A

IF A>=0 THEN PRINT  А=SQR(A)

PRINT “A=“;a

END

§ 11.2 Простые и составные условия.

В условных операторах и в операторе цикла WHILE в качестве условия можно использовать отношения равенства и неравенства: a>0; c<=0 и т.д.
Такие условия называют
 простыми.

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

Прежде всего требуется, чтобы все отношения, которые используются при построении, заключались в скобки: (a=b+1), (c>=0), (s>t) и т.д.

Далее, пусть А и В — некоторые условия. Рассмотрим связки, которыми они могут быть соединены.

1. А  and B (чит. А и В) — это условие соблюдается тогда и только тогда, когда соблюдаются оба условия.

2. A or B (чит. А или В) —  это условие соблюдается тогда и только тогда, когда соблюдается хотя бы одно из условий А и В.

3. not A (чит. не А) — это условие соблюдается тогда и только тогда, когда условие А не соблюдается.

При выполнении логических операций необходимо соблюдать следующий приоритет:

1)  NOT;  2) AND;  3) OR.

§ 11.3 Решение задач.

Задача 1.

Определить, принадлежит ли число Х отрезку [3, 7].

РЕШЕНИЕ.

CLS
       INPUT “X=”;X

IF (X<3)or (X>7) THEN

   PRINT “Не принадлежит ”                    3                        7

ELSE

   PRINT “Принадлежит “

END IF

END

 

Задача 2.

Записать условия, которым удовлетворяют точки верхней полуплоскости системы координат:

                                         Y

                     

                                  0                        Х

На графике видно, что заштрихованы все точки, координаты Y у которых неотрицательны, следовательно  Ответ: Y>=0.

Задача 3.

Дано Х. Вычислить Y, если

       Х^3, при -1<=X<=1

Y= 7, в противном случае

     

Примечание: При вычислении Y нужно проверить знак Х. Сложное неравенство разобьем на 2 простых (Х>=-1) и (X<=1).

                  -1                        1

Т.к. эти условия должны выполняться одновременно, то мы должны связать их связкой   and.

Решение.

CLS

INPUT “X=“;X

IF (X>=-1)  and (X<=1) THEN Y=X^3 ELSE Y=7

PRINT “Y=“;Y

END

Задача 4.

Для заданной координатами Х и У точки проверить принадлежит ли она квадрату на рисунке:

                                                      4

                                       -2                  2  

  Решение:

CLS

INPUT “X=“;X

INPUT “Y=“;Y

IF (ABS(X)>=2) AND (Y<=4) AND (Y>=0)  THEN

    PRINT “ ТОЧКА ПРИНАДЛЕЖИТ“

ELSE

    PRINT “ТОЧКА НЕ ПРИНАДЛЕЖИТ“

END IF

END

Задача 5.

Вычислить значение выражения y= . Значение х ввести склавиатуры.

Решение.

CLS

INPUT “X=“;X

IF (x+1 <0 )  AND  (X=2)  THEN

   PRINT “При данном значении х функция не определена”

ELSE

    Y=SQR (X+1) / (X-2)

   PRINT “Значение функции равно “; Y

END IF

END

Задача 6.

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

ПРИМЕЧАНИЕ: Вспомните задачу 4 из §10.2. В этой задаче мы используем тот же прием, т.е.  заведем переменную-”копилку”, в которую будем класть единичку каждый раз, как встретим в слове букву “А”. Таким образом, раз мы должны будем проверить каждый символ текста, то налицо наличие в программе счетного цикла.

Решение.

CLS

INPUT “Введите текст: “; TEXT$

S=0

FOR I=1 TO LEN(TEXT$) STEP 1

  IF MID$(TEXT$, I, 1)=“A” THEN S=S+1

NEXT I

PRINT “В текст “; TEXT$; “буква *А* входит “; S; “раз”

END

Рассмотрим работу программы на конкретном примере:

Пусть TEXT$=“МАМА”.

S=0

I=1      копируем первую букву — “М”

          “М”=“А” ? нет

I=2     копируем вторую букву — “А”

          “А”=“А” ? да   S=S+1

I=3      копируем третью букву — “М”

          “М”=“А” ? нет

I=4     копируем четвертую  букву — “А”

          “А”=“А” ? да   S=S+1

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

Например, если TEXT$=“АБРАКАДАБРА”, то ответ будет — 5 раз.

если TEXT$ =“ЧИСЛО”, то ответ: 0 раз.

Задача 7.

Составьте программу, проверяющую является ли заданное слово “перевертышем” (т.е. читается ли слева направо и справа налево).

ПРИМЕЧАНИЕ: Задача перевертывания слова была рассмотрена в § 11.3. Заведем символьную переменную, в которую символ за символом, начиная с последнего перепишем заданное слово, а затем сравним его с исходным. Если они равны, то слово — перевертыш.

Решение.

CLS

INPUT ‘“Введите слово: “;B$

A$=“”

FOR I=1 TO LEN(B$) STEP 1

  A$=A$+ MID$(B$, I, 1)

NEXT I

IF A$=B$ THEN PRINT “Слово — перевертыш “ ELSE PRINT “Слово не
        является перевертышем “

END

Задача 8.

Составьте программу, заменяющую все точки в тексте на запятые.

CLS

INPUT ‘“Введите текст: “;B$

FOR I=1 TO LEN(B$) STEP 1

   IF MID$(B$,I ,1)=“.” THEN MID$(B$, I, 1)=“,”

NEXT I

PRINT “Преобразованный текст:”; B$

END

Примечание:

Разберем оператор IF MID$(B$,I ,1)=“.” THEN MID$(B$, I, 1)=“,”. Выделяем в тексте символ с номером I. Если этот символ — запятая, то выделенный символ заменяем на точку.

§ 11.4 Безусловный переход.

Бывают ситуации, когда в программе требуется пережать управление в другое место программы независимо от каких-либо условий. Это осуществляется с помощью оператора безусловного перехода GOTO.

ОБЩИЙ ВИД:

                GOTO    метка

где МЕТКА — это набор символов, начинающийся с буквы может содержать любое количество символов (букв и цифр) и  заканчивающийся двоеточием.

Задача 1.

Выводить на экран квадраты чисел, вводимых с клавиатуры.

ПРИМЕЧАНИЕ: Чтобы не произошло зацикливания, необходимо оговорить условие, при котором ввод чисел прекращается.

Решение.

CLS

PRINT “При вводе числа 0 программа закончит работу “

Met1:

INPUT “Введите число: “; A

IF A< >0 THEN PRINT A^2 ELSE END

GOTO Мet1

Если мы введем последовательно числа 7, -2, 0.4, 0, то получим следующий результат:

При вводе числа 0 программа закончит работу

Введите число: 7

49

Введите число: -2

4

Введите число: 0.4

0.16

Введите число: 0

ОК

Задача 2.

Выводить на экран строковую константу “QBASIC” до нажатия клавиши.

CLS

MET 1: PRINT ‘QBASIC”

IF INKEY$=“” THEN GOTO MET1

END

ПРИМЕЧАНИЕ:

Как уже было сказано выше, с помощью INKEY$ удобно создавать задержку в программе до нажатия клавиши. Например:

PRINT “Нажмите любую клавишу “

met:  IF INKEY$=“” THEN GOTO met

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

С этой же целью можно использовать и цикл WHILE...WEND:

WHILE INKEY$=“”

WEND

§ 12 Подпрограммы.

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

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

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

В QBASICE’е для организации подпрограмм существуют два оператора — GOSUB и RETURN.

ОБЩИЙ ВИД:

GOSUB      метка

где метка — это первая строка подпрограммы.

Назначение оператора GOSUB — передача управления на выполнение подпрограммы.

В отличие от оператора GOТО, оператор GOSUB не только осуществляет безусловный переход на выполнение программной строки с меткой, но и запоминает адрес точки, из которой произошел переход, в специальном участке памяти — стеке возврата.

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

Окончанием подпрограммы служит оператор

RETURN

То есть, в любой подпрограмме последней командой является оператор RETURN.

Основная программа обязательно должна заканчиваться оператором END.

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

Задача 1.

Найти значения функции Y=3X3+4X2 для X=1; -3; 5; -4.

ПРИМЕЧАНИЕ: В этом случае придется 4 раза выполнять рассчеты по одной и той же формуле и выводить результаты на печать. Поэтому эти действия рационально будет выделить в подпрограмму.

CLS                                                                      Результат:

X=1: GOSUB met

Х=1                Y=7

X=-3               Y=-45

X=5                 Y=475

X=-4               Y=-192

X=-3: GOSUB met

X=5: GOSUB met

X=-4: GOSUB met

END

met: REM ПОДПРОГРАММА

Y=3*X^3+4*X^2

PRINT “X=“;X, “Y=“;Y

RETURN

Задача 2.

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

                                                                                   ....................

                                       

                                                                 N

SCREEN 9: COLOR 2, 7: CLS

INPUT “N= “; N

WHILE  N<=0

  PRINT “ОШИБКА! ПОВТОРИТЕ ВВОД!”

WEND

CLS

X= 30

Y= 50

WHILE Y<300

FOR I=1 TO N STEP 1

   GOSUB СHERRY

   X=X+50

IF X>600 THEN
                 Y=Y+ 50: X= 30 : REM  Если х превысит 600, то переходим  

END IF                         : REM   на  новую строку

NEXT I

WEND

END

CHERRY:

CIRCLE(X,Y),20,4   :REM ягода

PAINT(X,Y),4

LINE (X, Y-20)-(X,Y-40),2             :REM веточка

CIRCLE (X+10, Y-30), 10, 2,,,1/3  :REM листочек

PAINT (X+10, Y-30),2

RETURN

ПРИМЕЧАНИЕ: В начале программы стоит защита от неверного ввода. Если пользователь введет число, которое меньше или равно нулю, то программа выдаст сообщение об ошибке и попросит повторить ввод.

В цикле по номерам вишенок задается координата Х центра окружности и происходит обращение к подпрограмме CHERRY, в которой рисуется вишенка. Если координата Х превысит 600, то увеличиваем значение координаты У, а Х присваивает начальное значение. Таким образом рисование вишенок перейдет на следующую строку.  

Задача 3.

Нарисовать елочку:

                                         30    

 10

 20

 30

Пусть высота каждого фрагмента елочки будет равна 10 пикселей, а длины будут равны 20, 40, 60.

Вынесем в подпрограмму рисование одного треугольника:

                           X,Y    

 

X-L/2,Y+H                        X+L/2,Y+H

РЕШЕНИЕ:

SCREEN 9:CLS

H=10:X=30

L=20:  Y=10: GOSUB EL

L=40:  Y=20: GOSUB EL

L=60:  Y=30: GOSUB EL

END

EL:

LINE(X,Y)-(X+L/2,Y+H),2

LINE-(X-L/2,Y+H),2

LINE-(X,Y),2

PAINT (X, Y+2),2

RETURN

Задача 4.

Нарисовать N елочек. N - вводит пользователь с клавиатуры.

Решение:

COLOR 2, 7: CLS

VVOD:

INPUT “N= “; N

IF (N<=0) OR (N>5) THEN

  PRINT “ОШИБКА! ПОВТОРИТЕ ВВОД!” : GOTO VVOD

END  IF

SCREEN 9: CLS: X=30

FOR I=1 TO N STEP 1

GOSUB FOREST

X=X+70

NEXT I

END

FOREST:

H=10

L=20: Y=10: GOSUB EL

L=40: Y=20: GOSUB EL

L=60: Y=30: GOSUB EL

RETURN

EL:

LINE(X,Y)-(X+L/2,Y+H),2

LINE-(X-L/2,Y+H),2

LINE-(X,Y),2

PAINT (X, Y+2),2

RETURN

Пояснение: В защите от неправильного ввода число N ограничено от 1 до 5, так как при наших размерах елочек помещается на экран не более пяти.

Подпрограмма FOREST рисует на экране всю елочку целиком, обращаясь к подпрограмме EL для рисования отдельных треугольников.

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


 ГЛАВА 5. МАССИВЫ.

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

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

Массив — это набор упорядоченных по номерам переменных одного типа, с общем именем.

Массив характеризуется именем, типом и размерностью.

Имя массива образуется по общему правилу образования имен в QBASIC’е, но его имя не должно совпадать ни с одним другим именем простых переменных, используемых в программе.

§ 13 Линейные массивы.

Пусть массив носит имя А и  имеет 10 элементов. Тогда его можно описать, как совокупность переменных с индексом: А(1), А(2), ... , А(10). Индексы определяют положение элемента в массиве. Число индексов определяет размерность массива.

Для хранения элементов массива в памяти компьютера необходимо выделить место. Количество ячеек памяти для массива определяется его размерностью. Для выделения памяти под массив используют оператор DIM (от англ. dimension — размер).

ОБЩИЙ ВИД:

        DIM   A(I), B(J),..., Z(N)

где A, B, ..., Z — имена массивов, I, J, ..., N — размерности массивов.

Например:    DIM ˜A(5), RS(10), J1(15) — означает, что компьютер отведет место для массива А из пяти элементов, массива RS из 10 элементов и массива J1 из 15.

Оператор DIM может быть использован в любом месте программы, но до первого обращения к массиву.


§ 13 Заполнение массива.

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

Есть несколько способов заполнения массивов:

1 способ. С помощью блока данных  DATA и READ.

ПРИМЕР. Заполним массив А из пяти элементов числами 1, 2, 3, 4 и 5.

DIM A(5)

DATA 1, 2, 3, 4, 5

READ A(1), A(2), A(3), A(4), A(5)

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

2 способ. С помощью оператора INPUT.

ПРИМЕР.  Заполнить с клавиатуры массив В из 4 элементов.

DIM B(I)

FOR I=1 TO 4 STEP 1

   INPUT B(I)

NEXT I

В этом случае в цикле переменная I является индексом элементов массива, и оператором INPUT B(I) будут запрашиваться по очереди В(1), В(2), В(3), В(4).

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

3 способ.  С помощью генератора случайных чисел (см. §10.5).

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

ПРИМЕР:

DIM C(10)

FOR I=1 TO 10 STEP 1

  C( I )=RND

NEXT I

§ 13.3 Вывод массива на печать.

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

Например, чтобы распечатать произвольный массив А(10), надо написать программу:

FOR I=1 TO 10 STEP 1

   PRINT A( I )

NEXT I

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

В некоторых случаях (большой массив, вывод на экран двух или более массивов одновременно) удобнее печатать массив в одну строку. Для этого надо поставить после оператора PRINT точку с запятой или использовать оператор LOCATE.

Например,        FOR I=1 TO 10 STEP 1

                            PRINT A( I );

                         NEXT I

                         PRINT

Пустой оператор PRINT отменяет дальнейший вывод в этой строке и переводит курсор для печати на следующую строку.

§ 13.4 Решение задач.

Задача 1.

Удвоить все элементы произвольного массива из 10 элементов, заданного на интервале [-50,50]. Вывести на экран оба массива.

Примечание. Поскольку массив произвольный, то лучше заполнить его случайным образом. Формула образования случайных чисел из диапазона  
[-50,50] — INT (100*RND - 50). В программе на экран будут выводиться два массива, поэтому печать лучше оформить как подпрограмму.

Решение:

CLS

DIM A(10)                                  определение массива

FOR I=1 TO 10 STEP 1             :’ задание

  A( I )= INT (100 *RND-50)      :’элементов массива

NEXT I                                      :’случайным образом

GOSUB PR                               :’обращение к подпрограмме печати

FOR I=1 TO 10 STEP 1              :’изменение

  A( I )=A( I )*2                              :’элементов

NEXT I                                       :’исходного массива

GOSUB PR                                :’ обращение к п/п печати

END

PR: FOR I=1 TO 10 STEP 1        :’подпрограмма печати

   PRINT USING”####”;A( I );

NEXT I

PRINT

RETURN

Задача 2.

Определить количество отрицательных элементов массива А(10), который задан случайным образом на интервале [-100,100].

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

CLS

DIM A(10)                                  :’ определение массива

FOR I=1 TO 10 STEP 1             :’ задание элементов массива

  A( I )= INT (200 *RND-100)  :’случайным образом

  PRINT USING”####”;A( I );  :’  и вывод на печать

NEXT I                                           :’одной строкой

N=0                                        :’инициализация переменной-копилки

FOR I=1 TO 10 STEP 1

  IF A( I )<0 THEN N=N+1   :’проверка знака элементов массива

NEXT I

PRINT  N; “Отрицательных элементов “

END

Задача 3.

В произвольном массиве A(N), заданном случайным образом на интервале [-50, 50], найти максимальный элемент.

Алгоритм:

1. Заведем вспомогательную переменную МАХ и присвоим ей значение первого элемента массива А(1).

2. Сравним МАХ со следующим элементом массива.

    Если МАХ < А(I),
               
то ячейке МАХ присвоим А( I )
               
Иначе перейдем к следующему элементу.

CLS

INPUT “ “;N

DIM A(N)

FOR I=1 TO N STEP 1

  A( I )= INT(100*RND-50)*100

  PRINT USING”####”; A( I );

NEXT I

MAX=A(1)

FOR I=2 TO N STEP 1

  IF MAX < A( I ) THEN MAX=A( I )

NEXT I

PRINT “Максимальный элемент массива “;MAX

END

§ 13.5 Символьные массивы.

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

Например,   DIM A$(5), B$(10).

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

Задавать символьный массив можно тоже одним из трех, выше описанных способов — с помощью INPUT, DATA  и READ и генератором случайных чисел   RND.

Рассмотрим последний способ. Здесь мы будем использовать функцию CHR$(N), где N — натуральное число от 0 до 255. Эта функция переводит число в соответствующий ему символ.

Известно, что коды латинских букв упорядочены по алфавиту и, начиная с 65 идут коды заглавных  букв, а с 97 — коды маленьких букв. Коды заглавных русских букв — с 128 до 159, а коды строчных русских букв по алфавиту не упорядочены.

Например, INT(RND*25+65) даст случайное число в интервале от 65 до 90, то есть в интервале больших латинских букв, а       CHR$( INT(RND*25+65)) преобразует этот код в символ.

Задача 1.

Даны символы s1,s2,...,s30. Получить символы данной последовательности в обратном порядке.

Решение.

CLS

DIM S$(30), A$(30)                              :’отводим место в памяти

FOR I=1 TO 30 STEP 1                        :’задаем массив

  S(I)= CHR$( INT(RND*25+65)):’ из больших латинских букв

  PRINT S$(I);                            :’печать массива в одну строку

NEXT I

PRINT                                         :’отмена вывода в текущей строке

FOR I=1 TO 30 STEP 1             :’задаем массив A$

  A$(I)= S$(31-I)                         :’А$(1)=S$(30), А$(2)=S$(29)...

  PRINT A$(I);                            :’печать массива в одну строку

NEXT I

PRINT

END

Задача 2.

В массиве слов найти слова, содержащие последним символом букву “о”. Вывести на печать эти элементы и их номера, распечатать весь массив.

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

Решение.

CLS

DIM A$(10)         :REM   oтводим место в памяти

DATA  Окно, Дом, Труба, Дерево, Цветы, Бревно

DATA  Золото, Сон, Поле, Дело                

FOR I=1 TO 10 STEP 1

  READ A$(I)         :REM задаем массив

  PRINT A$(I);            :REM печатаем массив

NEXT I

PRINT

L=0                               :REM “сигнальная лампочка”

FOR I=1 TO 10 STEP 1

  C$=MID$(A$(I), LEN(A$(I)), 1): ‘копируем последнюю букву и

  IF C$=“o” THEN PRINT  A$(I), I, “элемент”:’сравниваем с “о”

  L=1                      :’ если буквы совпадают,

NEXT I                  :’ лампочка меняет значение

IF L=0 THEN

    PRINT “Слов с последней буквой /О/ в массиве нет”

END  IF

END

Задача 3.

Список содержит фамилии 12 учеников и из возраст. Найти фамилии тех, кому больше 16 лет.

Решение:

CLS

DIM N$(12), W(12)

DATA ИВАНОВ, ПЕТРОВ, ВАСЕЧКИН, КРЫЛОВА

DATA ФЕДИНА, БОБКОВА, ЗАЙЦЕВ, ХРУЩЕВ, ГРИШИН

DATA СИДОРОВА, БОБРОВ, МОКРУШИНА

DATA 12, 14, 16, 17, 7, 10,12, 9, 17, 17, 8, 17

FOR I=1 TO 12 STEP 1

   READ N$(I)

NEXT I

FOR I=1 TO 12 STEP 1

   READ W(I)

NEXT I

FOR I=1 TO 12 STEP 1

   PRINT N$(I); “-”; W(I)

NEXT I

PRINT “ Старше 16 лет:“

FOR I=1 TO 12 STEP 1

   IF  W(I) > 16 THEN PRINT N$(I);

NEXT I

END

§ 14 Двумерные массивы (матрицы).

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

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

В математике двумерные массивы носят название матрицы.

Элементы двумерного массива(матрицы) имеют два номера — номер строки и номер столбца.

Например, запись А(m, n) означает массив из m строк и  n столбцов:

А11 A12  ... A1n

A21 A22    ... A2n

....................

Am1 Am2 ... Amn

Если m=n, то говорят, что матрица — квадратная. Элементы А11, А22...Аmn  — элементы главной диагонали или просто главная диагональ.

Чтобы описать массив и зарезервировать под него место в памяти, используют оператор DIM.

Например, DIM A(3,7), B$(3,3).

Вводить массивы можно по строкам и по столбцам.

а) По строкам:

DIM A(3,4)                     I=1    J=1    A(1,1)

|FOR I=1 TO 3                    J=2     A(1,2)        ПЕРВАЯ                          

|   FOR J=1 TO 4                J=3     A(1,3)         СТРОКА                    

|   |   A(I,J)=............                J=4     A(1,4)                            

|     NEXT  J                            I=2    J=1     A(2,1)

|NEXT I                                  J=2      A(2,2)       ВТОРАЯ

                                                      J=3     A(2,3)        СТРОКА

                                                      J=4     A(2,4)

                                   и так далее.

б) По столбцам:

DIM A(3,4)                     J=1    I=1    A(1,1)

|FOR J=1 TO 4                    I=2     A(1,2)        ПЕРВЫЙ                          

|   FOR I=1 TO 3                  I=3     A(1,3)        СТОЛБЕЦ                    

|   |   A(I,J)=............                 I=4     A(1,4)                            

|     NEXT  I                J=2    I=1     A(2,1)

|NEXT J                               I=2      A(2,2)       ВТОРОЙ

                                               I=3     A(2,3)        СТОЛБЕЦ

                                               I=4     A(2,4)

                                   и так далее.

Для вывода двумерного массива необходимо так же два цикла — по строкам и по столбцам:

FOR I=1 TO 3                    

FOR J=1 TO 4

PRINT  A(I,J);

NEXT  J

PRINT

NEXT I

Задача 1.

Сформировать случайным образом матрицу произвольного размера и вывести ее на печать.

Решение.

CLS

REM  Проверка ввода

Vvod: INPUT “Количество строк= “;N

INPUT “Количество столбцов= “;M

IF (M<=2) or (N<=2) THEN GOTO Vvod

DIM A(N,M)

REM Заполнение массива двузначными числами

FOR I=1 TO 3                    

FOR J=1 TO 4

  A(I,J)=INT(RND*100)

NEXT  J

NEXT I

REM Печать массива

FOR I=1 TO 3                    

FOR J=1 TO 4

  PRINT USING”####”; A(I,J);

NEXT  J

PRINT

NEXT I

END

Примечание.

Рассмотрим  формулу INT(RND*100). Как нам уже известно, RND выдает случайные числа в интервале от 0 до 1, то есть десятичную дробь. Если мы умножим десятичную дробь на 100 и выделим целую часть, то получим двузначное число. Например, 0.6543 *100=65.43    INT(65.43)=65

Задача 2.

Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов.

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

Решение.

CLS

INPUT ‘“Размер матрицы “; N

DIM A(N, N), D(N)

REM Заполнение и печать исходного массива числами

FOR I=1 TO N                    

FOR J=1 TO N

  A(I,J)=INT(RND*10)   случайные числа от 0 до 9

PRINT USING”####”; A(I, J);

NEXT  J

PRINT

NEXT I

REM формирование и печать массива из диагональных элементов

FOR I=1 TO N STEP 1

  D( I )= A(I, I)

  PRINT USING”####”; D( I );

   REM D(1)=A(1,1), D(2)=A(2,2), ... D(N)=A(N,N)

NEXT I

END

Задача 3.

В случайно заданном двумерном массиве все элементы, меньшие 50,  заменить нулями. Распечатать оба массива.

Решение.

CLS

INPUT “Число строк= “; N

INPUT “Число столбцов= “; M

REM Заполнение и печать исходного массива числами

FOR I=1 TO N                    

FOR J=1 TO M

  A(I,J)=INT(RND*100)   случайные числа от 0 до 9

NEXT  J

NEXT I

GOSUB PR

REM Заполнение и печать нового массива числами

FOR I=1 TO N                    

FOR J=1 TO M

  IF A(I, J) < 50 THEN A(I, J)=0

NEXT  J

NEXT I

GOSUB PR

END

PR: REM подпрограмма печати

FOR I=1 TO N                    

FOR J=1 TO M

  PRINT USING”####”; A(I, J);

NEXT  J

PRINT

NEXT I

PRINT

RETURN

Литература.

1. Абрамов С.А., Зима Е.В. “Начала информатики”

2. Перепелкин В. “Персональный компьютер в школе”

3. Быля Т.Н., Быля О.И. “Изучаем информатику”

4. Кушниренко Ф.Г. и др. “Основы информатики и вычислительной техники”

5. Шафрин Ю. “Практикум по компьютерной технологии”

6. С.Бобровский “Программирование на языке Qbasic”



Предварительный просмотр:

Мокрушина А.Е.

СБОРНИК
ЗАДАЧ
ПО ПРОГРАММИРОВАНИЮ

НА ЯЗЫКЕ

QBASIC

Нижний Новгород



I. ОБЩИЕ СВЕДЕНИЯ О ЯП QBASIC.

1. Какие из перечисленных сочетаний могут быть идентификаторами языка:

а) x;  x1;  x1;  x’;

б) x1x2;  ab;  abcd;  ab+cd;

в) sin; sin(x); sinx;

г) объем; delta; volume;

д) a1%; abc$; 2d$; dx1a.

2. Среди приведенных ниже имен величин выпишите те, которые могут быть идентификаторами

а) символьных переменных;

б) целочисленных переменных;

в) вещественных переменных;

a1; a1%; a$; abc; pcx; ddd1%; b$; x; y; xyz$; xy%; word$; word%; word.

а) 15е+3;

г) 1е+5

ж) 1.7е+2

к) 5.9е+3

б) 1.5е+2

д) -3е+4

з) -5.3е+2

л) 12.8е+4

в) 1.5е-2

е) -5е-2

и) 100е-2

м) -.4е+4.

3. Переведите числа из экспоненциальной формы записи в форму с фиксированной точкой:

4. Переведите числа в форму с плавающей точкой    
а) со степенью 2;        б) со степенью -2:
  3;  -0,005;  4,5;  72342;  35000;  -4700;  -0,00034.                    

5. Сравните числа:

а) 3.5  и  0.035е+2

б) 7.4  и  0.134е+3

в) 1.7е+3  и  2000  

г) 3.7е+2  и  371

д) 3е-5  и  0.0005

е) 35е-3  и  0.035.

6. Какие из следующих последовательностей символов являются выражениями, записанными по правилам ЯП QBASIC:

а) 1;       б) a;      в)ab;      г)1+y;      д)2xy;     e) -2*xy;        ж) xy2; з) x2+y2;      и) -abs(x)+sin(y);   k) abs(x)+cos(abs(y-1,7));   л)x+y*z;  м)1/2+beta ?

 7.  Переведите выражения в линейную форму:
а) ;       б)  ;   в) ;    г) ;   д) ;             е)   ;          
   ж) ;                         з) ;      
      и) mg cos
;                                  к) ;       л) ;                                м)         н).

8. Переведите из линейной формы записи в обычную:

а) a/b*c;      б) a/b^c;     в) a/b^c^d;    г) a+b/c;    д) (a+b)/c.

9.  Переведите из линейной формы записи в обычную:

а) 1/sqr(1+x^2);    б) sqr(x^2+y^2);         в) x^(1/3);     г) 1/x^(1/3);          д) (a+b)/(c+d);       е) a+b/c+d;                  ж)a/sin(a).

 10. Переведите из линейной формы записи в обычную:

а) sqr(tg(a+b))/ sqr(tg(a-b));             б)1/2*a*b*sin(c);    
в) 4*R*sin(
/2)*sin()*sin()            г) sgr(a*x^2+b*x+c).

 ОПЕРАТОР ПРИСВАИВАНИЯ.

 11. Какие из следующих последовательностей символов могут быть операторами присваивания:

а) a:=b

б) a=c+1

в) a/b+a/c

г) a+b=c

д) d=1

е) x=a+c

ж) y=x

з) a$=c$.

 12. Найдите ошибки в программах:

               а) а$=11                                       б) а=“дом”  
                  в$=“простое число”                  в$=“№5”
                  с$=a$+в$                                      с=а+в$
              в) в=13                                          г) х%=1.3
                 а%=100/в                                       у%=х%*10

              д) а$=“число”                               е) в%=“100”
                   в=15                                                а=“-10”
                   с=а$*в                                            с$=в$+а

13. Значение величины равно 3. Чему оно будет равно после выполнения команд:      

 а) х=5;     б) х=х+5;     в) у=х.

 14. Значение х равно 3. Чему было равно х до выполнения команд:
а) х=х+5;    б) х=-х;    в) у=х;    г) у=1: х=х+у;    д) у=х: х=у.

15. Какие значения последовательно получает переменная х после выполнения команд:  

а) х=1               б) х=5              в) х=10

    у=5                    х=х+4              у=х/2

    х=х+у               х=х/3                z=у*5
                         х=х*х+1         х=х+у+ z.

16. После выполнения оператора приcваивания х=х+у значение величины х стало равно 3, а значение у =5. Чему были равны значения величин х и у до выполнения оператора?

 17. Значение величины х равно а, значение у равно b. После выполнения каких их указанных ниже последовательностей команд значения величин х и у поменяются, т.е. х станет равно b, а значение у станет равно а:

     а) х=у               б) t=x           в) x=y+x            г) t=x
   y=x                   x=y               y=x-y                  y=t
                             y=t                x=x-y                 x=y.

18. Задать в виде оператора присваивания следующие действия:

   а) Переменной z присвоить значение, равное полусумме значений переменных х и у.

     б) Удвоить значение переменной а.
в) Значение переменной х увеличить на 0,1.
г) изменить знак значения переменной  t.

19. Задать с помощью операторов присваивания следующие действия:

   а) переменной а присвоить значение разности, а переменной b — полусуммы значений переменных х и у.

    б)переменной а присвоить значение удвоенного произведения значений переменных х и у, а переменной b — значение 0.

20. Написать оператор присваивания, в результате выполнения которого переменная Y получает значение, равное значению переменной Х, возведенному в пятую степень.

21. А=5: В=7. Напишите операторы присваивания   после выполнения которых значения переменных А и В поменяются.

22. Составить программу обмена значениями трех переменных величин a, b и c по следующей схеме:
а) переменной b присвоить значение c, переменной а — значение b, переменной c — значение a.
б) переменной b присвоить значение a, переменной c — значение b, а переменной а — с.

 ОПЕРАТОРЫ PRINT И INPUT.

23.  Какие из перечисленных последовательностей символов являются операторами вывода:
а) PRINT X, Y                    б)PRINT (X,Y)       в)PRINT “A=“;A      

      г)PRINT A, “symbols”      д) PRINT a=b         е) input a              ж)PRINT a;b;c                  з)PRINT “  “;k;” “

24. Напишите программу подсчета пути S, если время t=1.2 с, а скорость v=391 м/с. Отредактируйте программу т.о., чтобы подсчитать путь при  t=1.7 ч и скорости v=62 км/ч.

 25. Напишите программу, подсчитывающую объем прямоугольного параллелепипеда с измерениями а=1.3, b=2.7, с=3.4 и выводящую результат в виде:





26. Каменный уголь погрузили в вагон высотой 0.76м, длиной 6.43м, шириной 2.74м. Сколько тонн угля погрузили, если удельный вес угля 1.3т/куб.м?

27. Подсчитать площадь круга радиусом R=1.47см. Оформить в виде:







28. Вывести на экран свою визитную карточку. Например:
********************************************************
*       Смирнов      Алексей    Олегович              *
*              менеджер по кадрам                          *
*            фирма “НОВОЕ ВРЕМЯ”                      *
*                  тел. 673-54-21                                *
********************************************************

29. Какие числа будут выведены на экран в результате выполнения последовательности операторов:
INPUT x
x=x-1.2
x=sqr(x-1)*x+1
PRINT x, 2-3*x    
если в качестве исходного данного использовалось число:
а) 1.2;    б) 2.2;    в) 5.2;    г) 10.2 ?

 30. Какие числа будут выведены на экран в результате выполнения последовательности операторов:
INPUT x, y
x=x+y
y=x-y
x=x-y
PRINT x, y    
если в качестве исходного данного использовалось число:
а) 3.5 и 2.4 ;    б) 6.7 и -10.1 ?

 31. Даны два числа. Найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чисел.

32. По двум катетам найти гипотенузу и площадь прямоугольного треугольника.

33. Даны два числа х и у. Вычислить их сумму, разность и произведение.

34. Дана  длина ребра куба. Найти площадь грани, площадь полной поверхности и объем этого куба.

35. Вычислить значение выражения y=, используя для исключения повторяющихся вычислений промежуточную величину.

36. Известны количество жителей в государстве и площадь его территории. Определить плотность населения в этом государстве.

37. Дано расстояние в сантиметрах. Найти число полных метров в нем.

38. Дана масса в килограммах, Найти число полных тонн в ней.

39.  Дано расстояние в метрах, Найти число полных километров в нем.

40. Дано четырехзначное число. Найти
а) сумму его цифр;
б) произведение его цифр.

41. Выполните упражнения № 24-27, вводя данные с клавиатуры.

42. В киоске продают различные журналы стоимостью 12 рублей. Напишите программу, анализирующую покупку и выдающую на экран результат в виде:






IV СИМВОЛЬНЫЕ ВЕЛИЧИНЫ И ФУНКЦИИ.

43. Путем копирования и склейки выделить:
а) из слова “
ПУТЕВОДИТЕЛЬ” слова “ПУТЬ”, “ВОДИТЕЛЬ”, “ДЕЛО”, “ПУДЕЛЬ”, “ДЕТИ”.
б) из слова “
ФОРМАТИРОВАНИЕ” слова “ФОРМА”, “ТИР”, “ВАТА”, “ТЕМА”, “ФОРМИРОВАНИЕ”.
в) из слова “ПОСЛЕДОВАТЕЛЬНОСТЬ” как можно больше слов.

44. Определите, что будет изображено на экране  после выполнения программы:
а) a$=“РАДИУС”
   b$=“ВЕКТОР”
   c$=LEFT$(a$, 4)+MID$(b$, 5,1)
   PRINT c$

б) x$=“НАСТРОЕНИЕ “
   y$= MID$(x$, 5,2)+ MID$(x$, 3,2)
   PRINT y$

в) text$ =“БОЙ ЧАСОВ”
   PRINT MID$( text$, 6,1);
   PRINT MID$( text$, 4,1);
   PRINT LEFT$( text$, 1);
   PRINT MID$( text$, 4,1);
   PRINT RIGHT$( text$,1)

г) DATA  A, B, C, 1, 2, 3
   READ x$, y$, z$, x1, y1, z1
   PRINT x$+y$+z$
   PRINT x1+ y1+z1  
д) г) DATA  1, 2, 3
   READ a$, b$, c$
   PRINT a$+ b$+ c$

45. Какой оператор пропущен, если на экране после выполнения программы получилось слово
а)  МЕЧТА  :                               б) ЛЕТО:
     REM  фрагмент а)                    REM фрагмент б)
      a$=“ПОЧТА”                           x$=“ВОССТАНОВЛЕНИЕ”
     b$=“МЕРА”                             а1$=mid$(x$, 10, 2)
     ...                                                  ....
     PRINT c$                                   a3$= mid$(x$, 8, 1)  
                                                          PRINT a1$+a2$+a3$

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


V ГРАФИКА.

 47. Построить прямоугольник с вершинами в точках (80,80), (170,150), (80,150), (170, 80), цветом 10.

48. Построить закрашенный прямоугольник с вершинами диагонали (60,80) и (150,250) цветом 4.

49. Построить и закрасить квадрат со стороной 60 пикселей, центр которого совмещен с центром экрана. Цвет — любой.

 50. Построить и закрасить прямоугольник со сторонами 100 и 50 пикселей, правый верхний угол которого совмещен с правым верхним углом экрана.

51. Построить круг радиусом 100 пикселей, центр совмещен с центром экрана, цвет 5.

52. Построить треугольник с вершинами в точках (100,100), (150,100), (80,170).

53. Построить шестиугольник с вершинами в точках (120,100), (140,120), (140,140), (120,160), (100,140), (100,120).

 54. Построить пятиугольник с вершинами в точках (100,100), (100,120),  (120,140), (150,100), (120,60).

55. Построить кольцо толщиной 20 пикселей и внешним радиусом 80 пикселей.

56. Построить кольцо толщиной 50 пикселей и радиусом внутренней окружности 20 пикселей. С=3.

57. Построить и закрасить круг радиусом 50 пикселей, центр совмещен с центром экрана.

58. Построить три вложенных квадрата разного цвета со сторонами 100, 50 и 25 пикселей. Верхняя вершина общая, имеет координату (50,50).

59. Построить три вложенных квадрата со стороной 100, 50 и 25 пикселей. Центр квадратов —  общий, имеет координату, совпадающую с центром экрана.

60. Построить три вложенных окружности с радиусами 50, 80 и 110 с одной общей точкой:
а)                                      б)                      

61. Напишите программу рисования картинки:

а)                                              б)                                





 в)                                   г)          








д)                                                   е)





ж)                                                   з)  


                                                   



и)

                                                               




к)                                   л)





м)

                                                       


н)                                               о)

                                                                         




п)                                                  р)





с)









VI СЧЕТНЫЙ ЦИКЛ FOR...NEXT. 

 62. Что будет изображено на экране после выполнения программы:
a) FOR I=1 TO 10 STEP 1
       PRINT I;
   NEXT I
б) FOR I=1 TO 100 STEP 1
       PRINT “УРА!”
   NEXT I
в) FOR I=10 TO 0 STEP 1
       PRINT I+I ;
   NEXT I

63. Нарисовать 15 прямоугольников с координатами диагонали (20,20) и (300,180), окрашенных последовательно в цвета от 1 до 15.

64. Нарисовать 4 вложенных окружности с центром (50,100), радиусы которых 10, 20, 30 и 40. С=5.

65. Разлиновать экран в режиме SCREEN 7 горизонтальными полосками, расстояние между которыми 10 пикселей.

66. Разлиновать экран в режиме SCREEN 7 вертикальными полосками, расстояние между которыми 10 пикселей.

67. Разлиновать экран в клетку, используя программы задач №65 и №66.

68. Нарисовать лесенку:
Примечание:   длина ступеньки — 30 пикселей,                                                              высота — 15 пикселей.
          10,10                          



69. Нарисовать пять касающихся окружностей одного радиуса:
        Примечание:   Центр первой окружности (50,50),                                                         радиус каждой окружности   30.


70. Подсчитать  сумму первых N натуральных чисел.  ввести с клавиатуры.

71. Составьте программу, выводящую на экран таблицу перевода милей в километры (1 миля=1.603 км) от 1 мили до 10.

72. Подсчитать N! (N!=1*2*3*...*N), N ввести с клавиатуры.

73. Дано натуральное N. Вычислить:  
 а) 1 +++...+;              б) .
в)                    г).

74. Написать программу вычисления суммы всех двузначных чисел.

75. Написать программу вычисления суммы всех двузначных
а) четных;    б) нечетных   чисел.

76. Написать программу вычисления суммы  для n=1,3,5,...15.

77. Составьте программу, выводящую таблицу умножения на N.            N вводится с клавиатуры.

78. Напишите программу обращения слова.
Например: АБРАКАДАБРА — АРБАДАКАРБА,   МАША — АШАМ.

79. Изобразить на экране отрезок, пересекающий с постоянной скоростью экран слева направо параллельно горизонтальной оси. Длина отрезка 15 пикселей.

80.  Получить изображение прямоугольника, движущегося :
а) слева направо;                      б) сверху вниз;
в) справа налево;                      г) снизу вверх.

81. Получить изображение:
                     а) надувающегося шарика;
                     б) сдувающегося шарика;
                     в) надувающегося  и сдувающегося шарика
максимальный радиус задает пользователь с клавиатуры.

82. Напишите программу с использованием динамического элемента
(горящая свеча, снаряд, вылетающий из пушки, движущийся утюг...).

83. Вывести на экран 100 случайным образом расположенных  точек.

84. Построить 40 отрезков, выходящих из центра экрана и имеющих различные длины и направления.

85. Написать программу, в результате выполнения которой слово “QBASIC” пробежит по экрану слева направо и справа налево.

86. Написать программу, имитирующую бегущую строку произвольного содержания.

87. Построить на экране множество случайных треугольников.

88.  Построить N случайных треугольников с одной общей вершиной в центре экрана. N — ввести с клавиатуры.

89.  В белом прямоугольнике с координатами диагонали (50,50) и (150, 100) выводить случайные точки до нажатия клавиши.

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

91. Из левого верхнего угла экрана рисовать случайные отрезки до нажатия клавиши.

92. Написать программу, рисующую случайные круги до нажатия клавиши.

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


VII ВЕТВЛЕНИЕ.

94. Определите, какие из перечисленных ниже операторов могут быть операторами условного перехода:
а) IF A=B THEN A=B;
б) IF A=B THEN A=B ELSE B=A;
в) IF A=B TO C=A+B;
г) IF A<>B THEN A=ABS(B)
д) IF A<0 THEN PRINT A ELSE END;
е) IF A<>0 THEN Y=1/A ИНАЧЕ ЕND.

95. Составить программу вычисления значения функции Y для х, вводимого с клавиатуры:
а) Y= ;      б) Y=;     в) Y=      г) Y=  .

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

97. Даны три числа. Возвести в квадрат те из них, значения которых неотрицательны. Отрицательные числа оставить без изменения.

98. Найти наименьшее из трех чисел.

99. Найти значение функции у=, в точке x. Значение х ввести с клавиатуры.

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

101. Даны два числа.  Вывести на печать первое число, если оно больше второго, и оба числа, если это не так.

102. Дано Х. Вычислить У, если:

а)           x2, при -2x2
       У=
             4, в противном случае.


б)         х
2+4х+5, при х2
   У=          , при х > 0
           в противном случае.

в)          0 при х
0
    У=    х при 0             х
4 в противном случае.

103.  Дано действительное x. Для функций y=f(x), графики которых представлены на рисунках, вычислить f(x).
а)                 у                                 б)                            у          у=4

           у=-х                                                                   у=х
2      y=x2


                                                          у =1/x
2                                                                                                                                                                                                                                                         
     
                             у=-х
2                                                           -1                    2



104. Запишите условия, которым удовлетворяют точки, принадлежащие фрагментам плоскостей, изображенных на рисунках:
а)                у                                   б)           у                                                                                                          
                                                             

                                                 х                                                      x              



                    у                                                                у
в)                                                     г)            

                                              х                                                                х

                                                                                                                                     
д)                         у                                              у                                                                                                                            
                                                     е)                    
                       
                                                х                                                  x                                                                                                                                                          

                                                                                                                                                                                                                                     
 
ж)                           у                                             у                                
                                                     з)                          2                                                        

                                    у=х
                                         х                      -2                                 x
                                                                       
                                                                                                       
         

и)                                                    к)
                              у                                                 у
                                                                                 
                                                                                  2  
               
                                               
               -2    -1         1     2    x                      -2               2        x                                                                                                    


   

             
                                                                                                                                       

105. Определить, принадлежит ли заданная точка фигуре. Решить задачу для точек с координатами (-0,5; 0,8) и (0,5; 0,4).


                                                        у
                                                       
                                                            1
                                                 -1         0     1          х    

106. Определить, принадлежит ли заданная точка фигуре. Решить задачу для точек с координатами (-0,2; 0,3), (-2,5; 0,4) и (1,5;-0,2).

                                                                           

                                                                                     у

                                                                          1

                                                               -1            0        1          х

                                                       
                                                                          -1

107. Заданы площади круга R  и квадрата S. Определить, поместится ли круг в квадрате. Задачу решить при     а) R=3,2; S=3,5;
                                                                           b) R=3,2; S=4;
                                                                           c) R=6; S=9.

108. По условному оператору, устанавливающему зависимость Y от X, построить график:
a) IF X<1 THEN Y=X^3 ELSE Y=2-X;
b) IF X>=2 THEN
            Y=X-4
   ELSEIF X>-1 THEN
            Y=-X
   ELSE
            Y=-1/X
   END IF;
d) IF X<1 THEN
            Y=ABS(X+2)
    ELSEIF X<=3 THEN
            Y=3
    ELSE
            Y=ABC(X).
c) IF ABS(X)>10 THEN
        Y=X
   ELSEIF X>0 THEN
         Y=2*X-10
   ELSE
         Y=-10
   END IF.

109. Даны переменные х и у. Выяснить, принадлежит ли точка с координатами (х,у) кольцу с центром в начале координат с внешним радиусом 3 и с внутренним радиусом 2,5 пикселя.

110. Напишите программу подсчета вхождения буквы “А” в заданный текст.
Например: БАРАБАН — рез. 3
                    МОРЕ — рез. 0.

111. Составьте программу проверяющую, является ли заданное слово перевертышем.
Например: ШАЛАШ — да,
                   МОРЕ — нет.

112. Составьте программу замены в слове букв “А” на “Б”.
Например: МАМА — МБМБ,    БАРАН — ББРБН.

113.  Напишите программу подсчета числа вхождений слова Х$ в слово У$.
Например: Х$=“КОЛОКОЛ”   У$=“КОЛ”   рез.=2
Х$=“КОЛ”   У$=“КОКОН”   рез.=0

114. Составьте программу замены в слове слогов “БА” на “БУ”. Например, БАРАБАН - БУРАБУН.

115. Дана строка символов. Заменить в ней все “А” на “ААА”.
Например, МАША - МАААШААА.

116. Составить программу, удваивающую каждую букву слова. Например, ИГРА - ИИГГРРАА.

117. Составить программу, удаляющую из слова буквы “Д”.
Например, ДОВОД - ОВО.

118. Составить программу, вставляющую перед каждой буквой “О” букву “Р”. Например, ОВОД - РОВРОД.

119. Дан текст. Вывести номера первой и последней запятой.

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

121. Предложение состоит из слов, между словами один пробел, а после последнего слова —  точка. Найти длину самого длинного слова.

122. Дано натуральное N. Разложить его на простые множители.

123. Даны натуральные числа M и N. Определить их наименьшее общее кратное.

124. Даны натуральные числа M и N. Определить их наибольший общий делитель.

125. Составить программу контроля знаний столиц европейских государств. Например Англия — Лондон, Франция — Париж, Испания — Мадрид.

126. Составить программу, реализующую эпизод из сказки: спрашивает, куда предпочитает пойти пользователь (направо, прямо или налево) и печатает, что его ждет в каждом случае. Ответ  компьютера присвоить символьной переменной и напечатать. Текст вопросов и ответов компьютера задать самостоятельно.


VIII ПОДПРОГРАММЫ. 

127. Найти значения функции y=sin(x) для значений х= 1,2; 3,14; 6,28; 0,6 радиан.

128. Найти значения функции y=x2+x/2 для значений х=-4; 0.5; 12,02.

129. Найти значения функции y=sqr(x)  для значений х=12,4; 345; 45,8; 999.

130. Нарисовать улицу из N домиков, используя подпрограмму:





                                                                            . . .

131.  Напишите программу, рисующую N картинок с использованием подпрограммы:







                                                         ....
 

132. Напишите программу, рисующую картинку с использованием подпрограммы:





                                                                                       

133. Напишите программу, рисующую картинку с использованием подпрограммы:





                                                     ...................

134. Напишите программу, рисующую картинку с использованием подпрограммы:






135. Нарисовать N флажков. N задает пользователь с клавиатуры:




                                                      . . .

136. Нарисовать N елочек. N задает пользователь с клавиатуры:


                               
                                             . . .

137. Нарисовать N конфет. N задает пользователь с клавиатуры:




138. Нарисовать N конфет. N задает пользователь с клавиатуры:



139. Нарисовать N пирамидок. N задает пользователь с клавиатуры:






140. Нарисовать “флот” из N корабликов. N задает пользователь с клавиатуры:



                                                             . . .

141. Нарисовать забор из N досок. N задает пользователь с клавиатуры:





                                                                         
...

 ЛИНЕЙНЫЕ МАССИВЫ.

142. Напишите программу заполнения линейного массива натуральными числами 1. 2. 3 ... Размерность массива ввести с клавиатуры.

143. Заполнить массив элементами, равными их удвоенным порядковым номерам.

144. Даны два числовых массива а(n) и b(n). Заполнить массив с(n), где с(i)=a(i)+b(i). Вывести на печать все массивы.

145. Напишите программу, прибавляющую ко  всем элементам массива по единице. Выведите на экран оба массива.

146. Напишите программу, удваивающую   все элементы массива. Выведите на экран оба массива.

147. Измените элементы массива на противоположные по знаку.

148. Составьте программу замены нулевых элементов массива единицами.

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

 

150. Дан произвольный массив чисел длины N. С клавиатуры задано число А. Определить, входит ли А в массив.

151. Найдите число ненулевых элементов в произвольном массиве.

152.  В произвольном линейном массиве найдите количество нечетных элементов.

153. В произвольном линейном массиве найдите  максимальный и минимальный элементы.

154. В произвольном линейном массиве найдите  значение максимального элемента. Если таких несколько, то определить сколько их.

155. В произвольном линейном массиве найдите  максимальный элемент и поставьте его первым.

156. Известны данные о среднемесячной температуре за год. Определить, какая температура была самой высокой за лето и самая низкая за зиму.

157. В произвольном линейном массиве найдите  сколько в нем имеется пар одинаковых элементов.

158. Дан одномерный массив. Все его элементы, равные нулю, переписать в начало массива, а остальные — в конец.

159. Напишите программу подсчета положительных, отрицательных и нулевых элементов массива.

160. Упорядочить по возрастанию элементы массива.

161. Упорядочить по убыванию элементы массива.

162. Подсчитать среднюю сумму элементов одномерного массива произвольного размера и заполнения.

163. В массиве символов, заполненном латинскими буквами,  расположить все элементы по алфавиту.

164. Даны символы s1, s2, ..., s30.  Получить символы данной последовательности в обратном порядке.

165. Даны символы s1, s2, ..., s80. Определить количество неверных равенств среди: s1=s41, s2=s42,..., s40=s80.

166. В массиве слов найти слова, содержащие последним символом букву “А”. Вывести на печать эти элементы и их номера, распечатать весь массив.

167. В массиве слов найти все слова, содержащие букву “У”. Вывести на печать эти элементы и их номера, распечатать весь массив.



   ДВУМЕРНЫЕ МАССИВЫ.

168. Заполните массив из 5 строк и 6 столбцов натуральными числами и выведите его на экран.

169. Заполнить массив А(N,N) таким образом, чтобы все элементы, расположенные выше главной диагонали были равны  1, а остальные элементы — случайные на интервале от (0, 10).

170. Заполнить массив В(М, N) таким образом, чтобы нечетные столбцы состояли из единиц, а четные — из двоек.

171. В квадратной  матрице А(N,N) заменить элементы,  вычтя из каждого элемент а11.

172. Дана целочисленная матрица NxN. Найти номера столбцов:

а) все элементы которых равны 0;

б) все элементы которых равны;

в) все элементы которых меньше нуля.

173. Найти наибольший элемент квадратной матрицы.

174. Найти наименьший элемент квадратной матрицы.

175. Дана целочисленная матрица MxN. Найти в ней наименьший элемент и определить его местоположение. Если таких элементов несколько, то вывести на экран положение каждого из них.

176. Дана целочисленная матрица MxN, состоящая из латинских букв. Отсортировать каждую строку в алфавитном порядке.

177. Подсчитать количество положительных, отрицательных и нулевых элементов двумерного массива произвольного размера.

178. Вывести на экран элементы главной диагонали квадратной матрицы произвольного размера и заполнения.

179. Подсчитать среднее значение элементов произвольного двумерного массива.

180. Дан массив чисел А(N,N), заданных случайным образом на интервале (-10,10). Подсчитать произведение тех элементов, которые не превышают среднее значение элементов массива.

181. В двумерном массиве А(3, 20) заданы координаты точек и их цвета ( 1 и 2 строки — x1 и y1, 3 строка — цвет). Построить заданные точки.

182. В двумерном массиве А(5, 10) заданы координаты концов отрезков и их цвета ( 1 и 2 строки — x1 и y1, 3 и 4 строки — x2 и y2, 5 строка — цвет). Построить заданные отрезки.

183. В двумерном массиве А(4, 15) заданы координаты центра, радиусы окружностей и их цвета ( 1 и 2 строки — центр, 3 строка — радиус, 4 строка — цвет). Построить заданные окружности.


По теме: методические разработки, презентации и конспекты

Презентация. Задачи. Сумма и произведение последовательных натуральных чисел( Qbasic)

Презентации по решению задач в Qbasic на тему "Сумма и прозведение натуральных чисел"...

Лабораторные работы в QBasic.

Материал включает пять тем: условный оператор, циклы, массивы, строки, графика....

Графические операторы языка QBasic

Бинарный урок на тему "Графические операторы языка QBasic" интегрирует два предмета "Математика" и "Информатика". На первом этапе урока рассматриваются различные решения задач методом координат, затем...

Текст в графике. QBasic.

Урок для учащихся 9 класса.Расматривается использование операторов LOCATE  и PRINT, добавляющими текст в графику в среде программирования QBasic....

Презентация по информатике (команда DRAW в языке QBasic)

Подробное и точное повторение учебника Босовой для 5-6 классов, работа выполнена моей выпускницей. Удлбно использовать при объяснениях на уроке....

Основы программирования в среде QBasic, 5 класс

Основы программирования в среде QBasic, 5 класс. Учебное пособие, - Пермь, 2008    Составитель: Волкова Евгения Игоревна.    МОУ СОШ № 9 с углубленным ...

Методичка по QBasic для начинающих программировать

Методичка по Бейсику для начинающих программировать (6-8 класс). 2002 год....