Учебно-методическое пособие Основы алгоритмизации и программирования в примерах на языке BASIC Автор: Шадрина Е.В. Нижний Новгород 2014г Учебное пособие предназначено для самостоятельного изучения школьниками/студентами, одного из разделов курса “Информатика”. Изложены основные элементы алгоритмизации и операторы языка BASIC. Учебные примеры программ иллюстрируют принципы алгоритмизации. По основным темам приведены варианты контрольных заданий и контрольные вопросы для подготовки к экзамену (зачету). 2 ВВЕДЕНИЕ Язык программирования - это система команд, "понятных" ЭВМ. Разделяют языки низкого и высокого уровня. Первые (в качестве примера можно назвать Ассемблер) позволяют управлять вычислительным процессором напрямую, при помощи машинных команд. Написание программ на языках низкого уровня - процесс сложный и трудоемкий: это удел узкого круга специалистов. Языки высокого уровня требуют для общения с машиной "переводчика" - транслятора, но процесс программирования при этом существенно упрощается. В настоящее время используют большое количество высокоуровневых языков в различных версиях, например, C, C++, С# и т.д. Каждый из них имеет свои особенности, но при этом общие принципы программирования на разных языках одни и те же. Освоение одного из языков облегчает изучение других. В настоящем разделе пособия изложены начала программирования на языке Basic. Подобный выбор продиктован тремя обстоятельствами: 1. этот язык достаточно прост в освоении, как и следует из его названия BASIC Beginner's Allpurpose Symbolic Instruction Code - универсальный язык символических инструкций для начинающих. 2. этот язык рассматривается в курсе основ информатики и вычислительной техники во многих средних и высших учебных заведениях. 3. язык является родоначальником таких мощных современных языков программирования для среды Windows, как VB (Visual Basic) и VBA (Visual Basic For Application), что позволит школьнику/студенту, освоившему язык BASIC быстро перейти на качественно иной уровень программирования, не отвлекаясь на освоение нового синтаксиса. Существует множество версий языка BASIC разного уровня сложности и совершенства, созданных для ЭВМ различных типов (QBasic, GWBasic, MSX-Basic, HBasic, Visual Basic, VBA и др.). Подчас данные версии несовместимы, но, несмотря на это, все они имеют общий фундамент - совокупность основных операторов и систему команд, которые и рассмотрены в настоящем пособии. 3 ОСНОВЫ АЛГОРИТМИЗАЦИИ Алгоритм - это последовательность действий, приводящих к намеченному результату. Алгоритм может быть представлен в обычной словесной форме в виде последовательности пронумерованных предложений. Однако наиболее наглядным является графический способ описания алгоритмов (в виде блок-схем). В этом случае каждому действию соответствует определенная алгоритмическая фигура (блок). Блоки соединяются между собой стрелками, указывающими порядок выполнения действий. Типы блоков: начало - начало алгоритма. - блок ввода данных; - блок вывода (печати) данных; - блок вычислений; - блок разветвления; конец - конец алгоритма. Линейный алгоритм - это такой, в котором действия выполняются последовательно, в порядке расположения блоков. Разветвляющийся алгоритм, в отличие от линейного, содержит блок разветвления (условия). В зависимости от выполнения условия выбирается один из двух (или более) различных вариантов вычислительного процесса. Затем вычислительный процесс опять сводится в одно русло. Для программирования разветвлений используются операторы условного и безусловного перехода.(if-else, select) Циклическим алгоритмом называется алгоритм, часть которого выполняется многократно с различными значениями изменяющейся по определенному закону переменной (переменной цикла). Многократно повторяющаяся часть алгоритма, внутри которой переменная цикла не изменяется, называется телом цикла. Для организации цикла определяются переменная цикла и его параметры - начальное и конечное значение переменной цикла и шаг ее изменения. При организации циклов с заданным числом повторений используются специальные операторы цикла for-next.С неизвестным числом повторений используются операторы цикла while-wend, do-loop until. 4 ФОРМАЛЬНЫЕ СВЕДЕНИЯ О BASIC Алфавит BASIC Алфавит языка BASIC включает: Все латинские прописные и строчные буквы; Арабские цифры 0-9; Знаки арифметических операций:^; *; /; +; -; \; MOD. Знаки операций отношения: =; >; <; >=; <=; <>. Разделители и прочие символы: . – точка; , - запятая; ; - точка с запятой; : - двоеточие; _ - пробел; ! – признак вещественной величины; # - признак вещественной величины двойной точности; % - признак целой величины; & - признак длинной целой величины $ - признак текстовой величины; () – круглые скобки; “ – кавычки; ‘ – апостроф. Используются также буквы русского алфавита, но в текстовых константах или комментариях. Данные в языке BASIC Данные Переменные Константы Числовые Вещественные Обычной точности не > 7 цифр (!) Двойной точности не > 14 цифр (#) Текстовые Не более 32 567 символов Целые Целая -32768 до 32767 (%) 5 Длинная целая –2147483647 до 2147483648 (&) Помните! Разделителем целой и дробной частей является точка. Например: 102! – константа, числовая, вещественная, обычной точности. 95966.46789# - константа, числовая, вещественная, двойной точности. 4326% - константа, числовая, целая. “План на неделю” – константа текстовая. Заключается в кавычки. Переменные Переменная – это величина, значение которой может изменяться в процессе выполнения программы, обозначается именем (идентификатором). Имя переменной – это произвольный набор символов, который может содержать о 1 до 40 символов. Первый символ должен быть латинской буквой, а остальные – латинские буквы или цифры. Регистр букв не имеет значения. Примеры имен: A; dN; GodRozd; k1%; dlina! Тип переменной BASIC различает пять типов данных. Когда записано с=a+b+2, BASIC должен знать, какой тип чисел имеется в виду. BASIC распознает тип переменной по суффиксу, т.е. по последнему символу в имени переменной. Переменные Символьные (A$) Целые (A%) Длинные целые (A&) Вещественные обычной точности (A!, A) Используется по умолчанию Вещественные двойной точности (A#) Применение суффиксов не всегда удобно: они загромождают текст, да и ошибиться в них легко. Поэтому в BASIC предусмотрен другой способ описания типа переменной. Общий формат команды описания типа: DEFINT X-X (целые числа, INTeger) DEFLNG X-X (длинные целые числа, LoNG) DEFSNG X-X (вещественные числа обычной точности, SiNGle) DEFDBL X-X (вещественные числа двойной точности, DouBLe) DEFSTR X-X (строки символов, STRing) Комбинация X-X - диапазон букв. Вместо диапазона можно указать одну букву. Например: 6 DEFLNG A-D, все переменные, имена которых начинаются с букв, лежащих в указанном диапазоне, т.е. с A до D, будут считаться длинными целыми (aRc, BT, DLINA и т.п.) DEFSTR STR, переменная STR- строка символов. Константы Константы (числовые или строковые) не меняются в ходе исполнения программы. Значения констант записываются явно, числом или строкой символов. Например: A%=12 Z$=”План на неделю” n!=-54.2 Существует специальный оператор для описания констант. Формат описания констант: CONST имя переменной=константа Например: CONST F2=60, n%=12 Если переменная описана как константа с помощью CONST, QBASIC не позволит случайно изменить ее значение. Пример: CLS DEFINT A-C DEFLNG R CONST G = 5 INPUT "Введите три значения"; A, B, C R = A ^ 2 + B * C + G PRINT "R="; R END Задание: 1. Набрать программу. 2. Запустить на выполнение. 3. В третьей строке внести изменение - DEF LNG заменить на DEFSNG. 4. В 6-ой строке внести изменение - * заменить на / . 7 Встроенные функции Некоторые наиболее употребительные функции вычисляются в Qbasic автоматически (приближенно, в виде ряда). Такие функции называются стандартными, а их таблица приведена ниже: Математическое обоНазвание функции Запись в Qbasic Примечание значение функции Синус sin x SIN(X) Х-в радианах Косинус cos x COS(X) Х-в радианах Тангенс tg x TAN(X) Х-в радианах Арктангенс arctg x ATN(X) Х-в радианах Корень квадратный SQR(X) x>=0 x x Экспонента e EXP(X) Логарифм натуральный ln x LOG(X) Х>0 Логарифм десятичный lg x LOG10(X) Абсолютное значение |x| ABS(X) Наибольшее целое не превышающее значение аргумента Целочисленное значение Int(x) Int(3.29) – 3 Int(-5.29) – -6 Отбрасывание дробной FIX(x) FIX(23.56.) – 23.0 части Генератор случайного равномерного распредеRND(x) ленного числа в интервале (0:1) Обмен значениями пеSWAP x, y ременных х и у Аргументом стандартной функции может быть число, переменная или выражение вещественного типа. Результат вычислений стандартной функции - вещественный. Арифметическим выражением называется набор констант, переменных и функций, соединенных знаками арифметических операций. Последовательность выполнения операций в выражении определяется скобками, а если их нет, то операции выполняются слева направо в соответствии с приоритетом: - вычисление функций (высший приоритет); - возведение в степень; - умножение, деление; - сложение, вычитание (низший приоритет). Например, выражение ab 3 c * sin 2 t в Qbasic имеет вид: 2 de f SQR((A*B^3-C)/(D*E^2+F))*SIN(T)^ 2 8 ОПЕРАТОРЫ BASIC Оператор комментариев Любую команду в программе можно снабдить поясняющим текстом - комментарием. Комментарии облегчают понимание текста программы. Комментарии можно записать двумя способами: a) REM произвольный текст b) ' произвольный текст На ход вычислений команда REM никакого влияния не оказывает. Например: REM вычисление функции ' вычисление функции Оператор ввода данных INPUT Структура оператора: INPUT текст, A, B Здесь INPUT - имя оператора; текст - необходимые пояснения (могут отсутствовать), A,B - список переменных, значения которых вводятся с клавиатуры. Пример input “Введите значения переменных А и В”,А,В При выполнении программы по оператору INPUT на экран монитора выводиться знак ‘?’ и делается пауза до тех пор, пока не будут введены значения переменных и не нажата клавиша {Enter} Если программа постоянно работает с некоторым набором числовых или символьных констант, то можно объявить такой набор блоком данных: DATA список констант В списке констант через запятую указываются значения констант, например: 10 DATA 5,25,19.6,30,12,"ABC" 20 DATA "BASIC","Pascal",25.9 В программе можно записать произвольное число операторов DATA. В блок данных по порядку включаются все константы и в памяти создаётся специальный указатель блока данных. Во время работы программы этот указатель содержит порядковый номер константы в блоке данных. При запуске программы указатель показывает на первую константу из блока данных. Для присвоения значений констант из блока данных переменным используется оператор READ: READ список переменных В списке переменных через запятую указываются имена переменных, которым присваиваются значения констант из блока данных. Типы переменных в списке READ должны соответствовать типам констант из блока данных. Например: READ a%, m%, t Переменным a%, m%, t присвоятся значения 5, 25 и 19.6. Указатель перемещается на 4ую константу. Оператор READ c, sc%, a$ Присвоит переменным c, sc%, a$ значения 30, 12, "ABC" и указатель переместится на "BASIC" и т.д. 9 Как несколько раз прочитать одни и те же данные из блока данных? Для восстановления указателя блока данных используется оператор RESTORE: RESTORE номер строки или метка где номер строки должен указывать на оператор DATA. Если не указан номер строки, следующий после RESTORE, READ начнет чтение с первой константы блока данных. Например: RESTORE READ vk%, s% RESTORE 20 READ z1$, z2$ vk%, s% присвоятся значения 5 и 25, а переменным z1$, z2$ - значения "BASIC" и "Pascal". Блок данных удобен в тех случаях, когда несколько раз используется одна и та же последовательность констант. Пример. Составить программу нахождения высоты равнобедренной трапеции, у которой основания 5м и 11м, а боковая сторона 4м. Данные ввести статически. DATA 5,11,4 READ BC,AD,AB AE=(AD-BC)/2 'Основание треугольника HT=SQR(AB^2-AE^2) PRINT"Высота трапеции =";HT END Оператор вывода данных PRINT Структура оператора: PRINT текст, A, B Здесь PRINT - имя оператора, текст - необходимые пояснения (могут отсутствовать), A,B - список переменных, значения которых выводятся на экран дисплея (могут отсутствовать). Элементы списка вывода разделяются либо запятой (зонный формат –5 зон по 14 позиций), либо точкой с запятой(компактный формат) Пример на экране print “Переменные А и В”,А, В print “Переменные А и В”,А; В print “Всем привет!” Переменные А и В 1 Переменные А и В 1 2 2 Всем привет! Оператор окончания программы Структура оператора: END Ставится в конце программы и не может иметь метки. Оператор присваивания Структура оператора: A=B Здесь A - переменная; B - арифметическое выражение, значение которого присваивается переменной A. Строго говоря А называется L-значением (lvalue), а В – r-значением (rvalue). Lзначение должно ссылаться на объект, который может принимать значения, - обычно это некоторая ссылка на область памяти:r-значение представляет собой любое выражение, имеющее значение, но оно не обязано хранить его – это может быть и ссылка и константа. Выражение 10 А=1234 Вполне законно при условии, что А может хранить числовые значения.Выражение 1234=А не имеет смысла и не будет компилироваться, потому что 1234 это константа не является lзначением. Пример. Вычислить значение функции y=ax2+bx+c при любых значениях a,x, b, c. a,b,c,x y=ax2+bx+c PRINT Введите a.b,c,x INPUT a.b,c,x y=a*x^2+b*x+c PRINT a=, a b=, b, c=, c, x=, x, y=, y END a,b,c,x,y конец Операторы отношений Операции отношения – это операции типа A>B, (или A<B, A=B и т.д.) в основе которых лежит сравнение операндов А и В, дающее в результате 1(истину) или 0 (ложь). Выражение A<B, им\стинно только в случае если А меньше В. Переменные А и В должны принадлежать к таким типам данных которые можно сравнивать. Обычно это целые или вещественные значения. В таблице привекдены все операторы отнощений языка basic Оператор < <= > >= = <> Описание меньше Меньше или равно Больше Больше иди равно Равно Не равно пример (a<b) (a<=b) (a>b) (a>=b) (a=b) (a<>b) Логические операторы Логические операторы AND и OR объединяют отношения выражений в соответствии с правилами для логического И и ИЛИ. Правила касающиеся использования операций AND и OR, можно свести в следующую таблицу А В А and B A or B True true True True True False False True False True False True False false False False Сложные логические выражения вычисляются рациональным способом. Например, если про вычислении выражения ( A <=B ) AND ( B<=C ) 11 оказалось, что А больше В, то все вырыжение, как и его первая составляющая (A<=B), примет значение ложь, поэтому вторая часть ( B<=C ) не вычисляется. Оператор условного перехода if Структура оператора: IF (выражение) THEN оператор END IF Выражением может служить любое условие, которое в результате дает значение истина или ложь. Если выражение истинно (ненулевое), то оператор выполняется. Если выражение ложно (нуль), то оператор пропускается и программа продолжает свою работу со следующего оператора. Оператор может быть составным: IF (выражение) THEN оператор 1 оператор 2 ….. оператор n END IF Пример. Вычислить квадрат числа, если оно попадает в заданный диапазон. Input “Введите число от 1 до 10”, number If (number>=1) and (number<=10) print “число внутри диапазона” number=number*number print number end if end начало number (number>=1) and (number<=10) нет да число внутри диапазона number=number*number number конец Оператор ELSE Оператор else(иначе) является расширением оператора if. После любого оператора if вы можете вставить оператор else для выполнения альтернативного действия. Структура оператора: IF (выражение) THEN оператор 1 ELSE 12 оператор 2 END IF Составными могут быть обе части IF (выражение) THEN оператор 1 оператор 2 ELSE оператор 3 оператор 4 END IF Можно вкладывать несколько конструкций if-else друг в друга, создавая многовариантный набор: IF (выражение1) THEN оператор 1 ELSE IF(выражение2) THEN оператор 2 ELSE IF(выражение3) THEN оператор 3 ELSE IF(выражениеN) THEN оператор N else оператор_умолчания END IF End if End if Если (выражение1) истинно, то выполняется оператор 1, и управление передается на конец конструкции (END IF). Иначе, если (ELSE IF) истинно (выражение2), то выполняется оператор 2, управление передается на END IF. Если нет, то проверяется следующее условие и т.д. (ELSEIF может быть несколько). Если ни одно из выражений не имеет значения истина, выполняется последний оператор_умолчания. Пример. Определить високосные годы. Год, открывающий новое столетие будет високосным, если без остатка делиться на 400. промежуточные годы (такие как 1996) будут високосными, если без остатка делятся на 4. Input year If (year>0) then If (year mod 400=0) then Print”год”, year, ”високосный” Else If (year mod 4=0) then Print”год”, year, ”високосный” Else Print ”год”, year,”не високосный” Endi 13 Endif Endif начало year нет year >0 1 да (year mod 400=0) or (year mod 4=0) нет да год year високосный год year невисокосный 1 конец ИЛИ более компактный код: Input year If (year>0) then If (year mod 400=0) or (year mod 4=0) then Print”год”, year, ”високосный” Else Print ”год”, year,”не високосный” Endif Endif end Оператор select Вложенный набор операторов if-else может выглядеть как запутанный водопровод старого дома. Система работает но не понятно какая труба куда ведет(особенно когда труб(у нас логических веток)достаточно много). Если требуется сравнивать одно и тоже выражение с множеством значений, то лучше использовать оператор select. Структура оператора: SELECT CASE выражение CASE Значение1 Оператор1 (или несколько операторов) CASE Значение2 Оператор2 CASE ELSE ОператорN END SELECT 14 Пример Print ”Menu: 1-add, 2- delete, 3-sqrt,4-quit ?” Input ch Select Case ch Case 1 Print “ you selected add” Case 2 Print “ you selected delete” Case 3 Print “ you selected sqrt” Case 4 Print “ you selected quit” Case 1,3 Print “ you selected add and sqrt” Case else Print “Error” End select Оператор selest предлагает выбранный символ ch в качестве анализируемого выражения. Последующие блоки case сравнивают переменную ch c цифрами (в нашем случае 1,2,3,4,) выдавая подтверждающее сообщение, если сравнение было удачным. Если совпадения с заданными буквами не случилось, блок case else выведет сообщение об ошибке. Возможно, в качестве значения указывать условие с помощью оператора IS Пример Вычислить значение функции y(x) при заданном значении аргумента X 2 , если X 1 y 4, если X 1 начало X 2, если X 1 input “x”, x select case x case is>1 y=x^2 case 1 y=4 case is<1 y=x+2 end select print “y=”, y x x Is > 1 y=x^2 1 y=4 y=x+2 Y= конец 15 Is < 1 Оператор безусловного перехода goto Структура оператора: GOTO M Здесь GOTO - имя оператора, M - метка оператора, к которому осуществляется переход. Оператор goto заставляет программу выполнить другой оператор и начиная с его позиции продолжить выполнение последующих операторов. На первый взгляд оператор goto может показаться ну очень полезным оператором. Однако на практике он дает слишком большую свободу скакать по программе куда угодно. В лучшем случае программу, которая имеет несколько операторов goto сложно понять, в худшем она вообще работает плохо. Пример Count=1 Top: print count Count=count+1 If (count>=10) goto top End. Оператор while Один из трех операторов цикла. Его используют для повторного выполнения операторов в течении всего времени, пока заданное условие истинно. Структура оператора нет WHILE условие условие Оперптор1 Оператор2 тело цикла да Оператор n Тело цикла WEND Оператор do-while Выполняется оператор, затем проверяется выражение. И до тех пор, пока значение этого выражения будет истинным, оператор будет повторяться. Оператор while вообще может не выполнить ни один оператор, если выражение с самого начала было ложно. А do-while всегда выполнить тело цикла хотя бы один раз. Структура оператора DO Тело цикла Оперптор1 Оператор2 тело цикла Оператор n условие LOOP UNTIL условие нет Пример найти суму чисел от 1 до 100 Используя цикл while (см. блок-схему) s=0 I=1 WHILE I<=100 S=S+I да I=I+1 WEND Print s xn=a xk=b h=c Используя цикл do-loop until i=xn s=0 I=1 DO нет I<=xk S=s+I I=I+1 LOOP UNTIL I>100 Print s да Тело цикла i=i+h Оператор FOR Когда вам точно известна (или ваша программа заранее может вычислить), сколько раз должен выполняться блок операторов, из всех циклов лучше выбрать оператор for. Формат оператора FOR: FOR i=xn TO xk [STEP h] Оперптор1 Оператор2 Оператор n тело цикла NEXT i где i - управляющая переменная, параметр цикла; xn, xk - начальное и конечное значения переменной (любые арифметические выражения); STEP-необязательный оператор h - приращение значения переменной (шаг изменения). По умолчанию hx=1. Операторы FOR и NEXT используются только совместно: оператор FOR определяет начало цикла и проверку условия выхода из цикла, когда параметр цикла превысит свое значение, а оператор NEXT - его конец. Выход из цикла можно осуществить двумя способами: 1) естественным, когда цикл выполняется заданное число раз, т.е. при проверке обнаруживается, что параметр цикла превысил конечное значение (в этом случае параметр цикла не сохраняет конечного значения);2) с любого оператора внутри цикла, не дожидаясь естественного его окончания. Это можно сделать с помощью управляющего оператора GOTO. Пример найти суму четных чисел от 1 до 10 Вариант1 на экране s=0 For i=2 to 10 step 2 s=s+i next i print”сумма четных чисел=”;s Вариант2 s=0 For i=10 to 1 step -2 сумма четных чисел=30 на экране сумма четных чисел=30 17 s=s+i next i print”сумма четных чисел=”;s Пример В простую переменную последовательно вводятся N чисел. Все ли числа меньше заданного числа Z? CLS INPUT "Сколько чисел в последовательности?"; N INPUT "Заданное значение ="; Z FLAG = 0 FOR I = 1 TO N INPUT "Очередное число ="; X IF X >= Z THEN FLAG = 1: I = N End if NEXT I IF FLAG = 1 then PRINT " не все"; ELSE PRINT "Все"; PRINT " числа последовательности больше"; Z END Циклический алгоритм, содержащий в теле цикла циклы по другим переменным, называется многомерным циклом. Правильная организация вложенного цикла с использованием оператора FOR: FOR_ _I=…TO … -----------FOR_ _J=… TO … -------------FOR_ _K=…TO… -----------NEXT _ _K -----------NEXT_ _J -------------NEXT_ _I Каждому оператору цикла FOR должен соответствовать оператор NEXT. Области действий циклов перекрываться не должны. Внутренний цикл целиком должен содержаться в теле внешнего цикла. Пример. Имеется экзаменационная ведомость по N группам студентов. В каждой по M человек. Вычислить количество успевающих и не успевающих студентов для каждой группы. cls INPUT "n", n INPUT "m", m FOR i = 1 TO n 18 god = 0 notgod = 0 PRINT "группа #"; i FOR j = 1 TO m INPUT "оценка очередного студента", ball IF (ball >= 4) AND (ball <= 10) THEN god = god + 1 ELSE notgod = notgod + 1 END IF NEXT j PRINT "в гуппе"; i, "успев="; god PRINT "в группе"; i, "неуспев="; notgod godf = godf + god notgodf = notgodf + notgod NEXT i PRINT "всего на факультете успевающих"; godf PRINT "всего на факультете не успевающих"; notgodf END Результат на экране n3 m3 grupp# 1 ocenka ochered studenta3 ocenka ochered studenta3 ocenka ochered studenta3 v gruppe 1 uspev= 0 v gruppe 1 NOTuspev= 3 grupp# 2 ocenka ochered studenta4 ocenka ochered studenta4 ocenka ochered studenta5 v gruppe 2 uspev= 3 v gruppe 2 NOTuspev= 0 grupp# 3 ocenka ochered studenta5 ocenka ochered studenta8 ocenka ochered studenta8 v gruppe 3 uspev= 3 v gruppe 3 NOTuspev= 0 vsego na fac uspev 6 vsego na fac neuspev 3 19 начало M, N I=1 god=0, notgod=0 группа # i J=1 ball (Ball<=4) and (ball<=10) нет да god=god+1 notgod=notgod+1 j=j+1 да J<= M god, notgod i=i+1 да i<=N нет godf notgodf конец 20 нет Цикл по переменной i является внешним, переменной j - внутренним. Тело цикла по j имеет разветвляющийся алгоритм. Тело цикла по i это весь цикл по j. Таким образом, вложенные циклы организуются по принципу “матрешки” (внешний цикл открывается первым и закрывается последним по отношению к внутреннему). 21 РАБОТА С МАССИВАМИ Необходимость в массивах возникает всякий раз, когда при решении задачи приходиться иметь дело с большим, но конечным количеством однотипных упорядочных данных. Совокупность индексированных переменных, имеющих одно и то же имя, называется массивом. Каждый элемент массива может быть явно обозначен посредством указания имени массива и множества индексов. Размерность массива определяется числом его индексов. Одномерный массив или вектор, представляет собой список элементов, обозначаемых одиночными индексами. В зависимости от того, имеет ли индексированная переменная один или два индекса, различают соответственно одномерный или двумерный массивы или n-мерные массивы. На рисунке приведен пример организации в памяти ЭВМ простых переменных и массивов. Простые переменные x v1 Двумерный массив а(7,6) a11 a12 A13 a14 a15 a16 a21 a22 A23 a24 a25 a26 a31 a32 A33 a34 a35 a36 a41 a42 A43 a44 a45 a46 a51 a52 A53 a54 a55 a56 a61 a62 A63 a64 a65 a66 a71 a72 A73 a74 a75 a76 y Одномерный массив x(5) x1 x2 x3 x4 x5 Память компьютера не безгранична, поэтому, в отличие от простых переменных, при работе с массивами необходимо прежде всего зарезервировать нужное число ячеек памяти. Для каждого массива это число определяется его размерностью - общим количеством элементов. Описание оператора, осуществляющего резервирование места в памяти, а также других необходимых для работы с массивами операторов, приводится в следующем разделе. ОПЕРАТОРЫ BASIC ПРИ РАБОТЕ С МАССИВАМИ Прежде всего отметим, что все рассмотренные ранее операторы, применяемые при работе с простыми переменными, годятся и для массивов. В то же время необходимо указать на наличие специальных операторов, без применения которых работа с индексированными переменными либо невозможна, либо затруднительна. Оператор описания массива DIMENSION Структура оператора DIMENSION a(7,6), x(5) или DIM a(7,6), x(5). Служит для отведения необходимого места в памяти для работы с массивами. Оператор всегда ставится в начале программы. Ввод и вывод массивов. Оператор INPUT, PRINT.Оператор DATA, READ. Пример. Ввести массив из 5 элементов и вывести его на экран. 22 Вариант1 Вариант2 cls CLS DIM x(5) DIM x(5) PRINT Введите массив x(5) DATA 1,2,3,4,5 FOR i=1 TO 5 FOR I = 1 TO 5 INPUT x(i) READ x(I) NEXT I NEXT I FOR i=1 TO 5 FOR I = 1 TO 5 print x(i); PRINT x(I); NEXT I NEXT I end end Пример. Ввести двумерный массив 3 на3 и вывести его на экран. Вариант1 Вариан2 CLS CLS DIM x(3, 3) DATA 1,2,3 PRINT "введите массив x(3,3)" DATA 4,5,6 FOR i = 1 TO 3 DATA 7,8,9 FOR j = 1 TO 3 DIM x(3, 3) INPUT x(i, j) FOR i = 1 TO 3 NEXT j FOR j = 1 TO 3 NEXT i READ x(i, j) FOR i = 1 TO 3 NEXT j FOR j = 1 TO 3 NEXT i PRINT x(i, j); FOR i = 1 TO 3 NEXT j FOR j = 1 TO 3 PRINT PRINT x(i, j); NEXT i NEXT j END PRINT NEXT i END Результат работы программы vvedite po elementno massiv ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 1 2 3 23 4 5 6 7 8 9 Теперь рассмотрим несколько примеров, связанных с характерными приемами работы с массивами. Одномерные массивы Пример вычислить сумму и произведение для заданных элементов массива а(10). CLS DIM x(5) DATA 1,2,3,4,5 FOR i = 1 TO 5 READ x(i) PRINT x(i) NEXT i s=0 p=1 FOR i = 1 TO 5 s = s + x(i) p = p * x(i) NEXT i PRINT "s="; s, "p="; p END Результат работы программы 1 2 3 4 5 s= 15 p= 120 Для перестановки местами элементов массива необходимо ввести промежуточную переменную copy. Алгоритм замены имеет вид: copy = x(1) x(1) = x(5) x(5) = copy Пример упорядочить элементы одномерного массива по возрастанию методом “пузырьковай” сортировки. CLS n = 10 DIM x(n) DATA 1,6,0,2,5,4,7,8,9,3 ‘визуализация массива FOR i = 1 TO n READ x(i) PRINT x(i); 24 NEXT I ‘сортировка массива FOR i = 1 TO n - 1 FOR j = i + 1 TO n IF x(j) < x(i) THEN copy = x(i) x(i) = x(j) x(j) = copy END IF NEXT j NEXT i ‘визуализация массива PRINT FOR i = 1 TO n PRINT x(i); NEXT i END Результат работы программы 1 6 0 2 5 4 7 8 9 3 0 1 2 3 4 5 6 7 8 9 Во многих задачах требуется поменять местами максимальный (минимальный) элемент массива с другим элементом. В этом случае при нахождении максимума (минимума) нужно запомнить его индекс, а затем использовать его в алгоритме замены. В задачах на нахождение минимуму/максимума всегда встает вопрос с чем сравнивать элементы массива. Для этой цели обычно служит первый элемент, с которым последовательно сравниваются все элементы массива. Пример найти максимальный и минимальный элементы массива и поменять их местами. CLS n = 10 DIM x(n) DATA 1,6,0,2,5,4,7,8,9,3 indeMin = 1 indexMax = 1 ‘визуализация массива FOR i = 1 TO n READ x(i) PRINT x(i); NEXT I ‘поиск минимума min = a(1) FOR i = 1 TO 10 IF a(i) < min THEN min = a(i) indexMin = i END IF NEXT i 25 ‘поиск максимума max = a(1) FOR i = 1 TO 10 IF a(i) > max THEN max = a(i) indexMax = i END IF NEXT i ‘перстановка местами максимального и минимального элементов FOR i = 1 TO 10 IF i = indexMin THEN a(i) = max END IF IF i = indexMax THEN a(i) = min END IF NEXT i ‘визуализация массива PRINT FOR i = 1 TO 10 PRINT a(i); NEXT i Результат работы программы -10 6 0 2 -5 4 7 8 9 3 9 6 0 2 -5 4 7 8 -10 3 В рассмотренных примерах в качестве элемента сравнения выступал первый элемент масива. Но существует задачи когда этот способ приводит к неверному решению Рассмотрим следующую задачу. Пример найти максимальный элемент из всех отрицательных элементов массива. CLS n = 10 DIM x(n) DATA -10,-6,0,2,5,4,7,8,-9,3 indeMin = 1 indexMax = 1 ‘визуализация массива FOR i = 1 TO n READ x(i) PRINT x(i); NEXT I ‘поиск максимума max=a(1) FOR i = 1 TO 10 IF a(i) < 0 THEN max = a(i) END IF Nex i FOR i = 1 TO 10 IF (a(i) < 0 AND a(i) > max) THEN max = a(i) END IF NEXT i PRINT "max iz otric", max 26 Результат работы программы max iz otric -6 Для данных DATA -10,-6,0,2,5,4,7,8,-9,3 Алгоритм дает правильный результат. Изменим данные на DATA 10,-6,0,2,5,4,7,8,-9,3 Обратите внимание, изменился первый элемент массива, 10-положительный элемент. Результат работы программы неверен max iz otric 10 Дело в том, что переменной max присвоили значение первого элемента, т.е. max=10 и все остальные отрицательные элементы мы пытаемся сравнить с ним a(i) < 0 AND a(i) > max. Условие всегда дает результат ложь и переменная max так и не разу не изменит свое значение. max = a(i). Оператор max = a(i) никогда не выполниться. Для правильной работы программы необходимо переменной max присвоить не просто первый элемент массива, а отрицательный элемент. FOR i = 1 TO 10 IF a(i) < 0 THEN max = a(i) END IF Nex i Двумерные массивы Прежде всего, необходимо остановиться на методике работы с квадратными матрицами. В квадратной матрице есть главная и побочная диагонали, расположение которых показано на рисунке. Главная диагональ Побочная диагональ i - строки, j – столбцы, n- число строк/столбцов Элемент лежащий на главной диагонали, определяется условием i = j Элемент лежащий на побочной диагонали определяется условием i + j = n+1 Область выше главной диагонали определяется условием i < j Область ниже главной диагонали i > j. Область выше побочной диагонали определяется условием i + j < n+1 Область ниже побочной диагонали - i + j > n+1 Пример найти сумму элементов лежащих на главной диагонали. CLS DIM a(3, 3) DATA 1,2,3 27 DATA 4,5,6 DATA 7,8,9, ‘ввод и визуализация массива FOR i = 1 TO 3 FOR j = 1 TO 3 READ a(i, j) PRINT a(i, j); NEXT j PRINT NEXT i ‘суммирование элементов на главной диагонали FOR i = 1 TO 3 FOR j = 1 TO 3 IF (i = j) THEN s = s + a(i, j) END IF NEXT j NEXT i PRINT "s="; s Результат работы программы 1 2 3 4 5 6 7 8 9 s= 15 Пример в матрице 3 на 3 поменять местами столбцы l и k. CLS DIM a(3, 3) DATA 1,2,3 DATA 4,5,6 DATA 7,8,9, ‘ввод и визуализация массива FOR i = 1 TO 3 FOR j = 1 TO 3 READ a(i, j) PRINT a(i, j); NEXT j PRINT NEXT i ‘ поэлементная перестановка местами INPUT "pomenet stolbec ", k INPUT "na stolbec ", l FOR i = 1 TO 3 copy = a(i, l) 28 a(i, l) = a(i, k) a(i, k) = copy NEXT i PRINT ‘визуализация массива FOR i = 1 TO 3 FOR j = 1 TO 3 PRINT a(i, j); NEXT j PRINT NEXT i END Результат работы программы 1 2 3 4 5 6 7 8 9 pomenet stolbec 2 na stolbec 1 2 1 3 5 4 6 8 7 9 29 РАБОТА СО СТРОКОВЫМ ТИПОМ ДАННЫХ Оператор LINE INPUT Оператор LINE INPUT позволяет ввести с клавиатуры строку длиной до 255 символов Формат: LINE INPUT “комментарии”,T$ T$ - строковая переменная. Выполнение команды LINE INPUT проводится аналогично команде INPUT с той лишь разницей, что: Вводится обязательно строковое и только одно значение; За поясняющим сообщением нет знака вопроса; Среди вводимых символов могут быть и запятая, и кавычки. Например: LINE INPUT”введите фамилии”,T$ <набираем: Иванов, Петров, Николаев > после этого T$ будет содержать: Иванов, Петров, Николаев Операции со строковыми данными Со строковыми данными возможна одна операция конкатенация – объединение двух строковых последовательностей в одну. Формат: A$ + B$ Например: A$=”Графический” D$=” редактор” T$=A$+B$ PRINT T$ <На экране появится: Графический редактор> Функции для работы с текстами Функция LEN предназначена для определения длины символьного выражения Формат: LEN (текст) Функция определяет длину значения строкового выражения. Например: T$=”Москва” K=LEN(T$) PRINT “длина текста = “;K <На экране появится: длина текста = 6> В QBASIC существует несколько функций, позволяющих выделять символы из текстового выражения. Функция LEFT$ возвращает строку символов из n левых символов Формат: LEFT$ (текст, n) Например: 30 T$=”контрабас” A$=LEFT$(T$,6) ? A$ <На экране появится: контра> Функция RIGHT$ возвращает строку символов из n правых символов Формат: RIGHT$ (текст,n) Например: T$=”контрабас” A$=RIGHT$(T$,3) ? A$ <На экране появится: бас> Если число n больше длины текста, то обе функции возвращают весь исходный текст. Функция MID$ (возвращает фрагмент из текста: n символов, начиная с k-го символа. Формат: MID$ (текст,k,[n]) К – порядковый номер символа. N – количество символов, подлежащих обработке. Оператор MID$ замещает часть строковой переменной другой строкой. MID$(строк_переменная$,k[,n])=строк_выражение$ строк_выражение$ - строка, из которой функция MID$ возвращает подстроку, или строка замещения, используемая в операторе MID$. Может быть любым строковым выражением. K - позиция первого возвращаемого или замещаемого символа в строке. N - число символов в подстроке. Если длина опущена, MID$ возвращает или замещает все символы справа от начальной позиции. строк_переменная$ - строковая переменная, изменяемая оператором MID$. Пример: Text$ = "Париж, Франция" PRINT Text$ 'Вывод: Париж, Франция MID$(Text$, 8) = "Сиэтл " PRINT Text$ 'Вывод: Париж, Сиэтл Например: T$=”информатика” A$=MID$(T$,3,5) ? A$ <На экране появится: форма> Если n не указано, то функция возвращает символы начиная с к-го и до конца текста. Например: T$=”Москва, Париж и Лондон” A$=MID$(T$,9) ? A$ <На экране появится: Париж и Лондон> Пример 1. Задан текст. Подсчитать каких букв в тексте больше “а” или “о” и на сколько. LINE INPUT “введите текст”;T$ L=LEN(T$) KA=0 : KO=0 FOR I=1 TO L 31 IF MID$(T$,I,1)=”A” OR MID$(T$,I,1)=”a” THEN KA=KA+1 IF MID$(T$,I,1)=”O” OR MID$(T$,I,1)=”o” THEN KO=KO+1 NEXT I IF KA>KO THEN PRINT “Букв а больше, чем о на “;KA-KO IF KO>KA THEN PRINT “Букв o больше, чем a на “;KO-KA IF KA=KO THEN PRINT “Букв а и о равное количество “ Пример 2. Задан текст. Подсчитать сколько предложений в тексте. LINE INPUT “введите текст”;T$ L=LEN(T$) К=0 FOR I=1 TO L IF MID$(T$,I,1)=”.” OR MID$(T$,I,1)=”!” OR MID$(T$,I,1)=”?” THEN K=K+1 NEXT I PRINT “В тексте “;K;” предложений” Пример 3. Дано слово “информатика”. Составить из букв этого слова 3 новых слова. T$=”информатика” T1$=MID$(T$,3,3)+MID$(T$,7,1) T2$=MID$(T$,5,1)+LEFT$(T$,1)+MID$(T$,3,1)+MID$(T$,6,2) T3$=MID$(T$,2,1)+MID$(T$,4,2)+RIGHT$(T$,2) PRINT T1$;”, “;T2$;”, “;T3$ <на экране появится: фора, рифма, норка> Пример 4. Дано слово. Выяснить является ли это слово перевертышем, то есть читается слева направо и наоборот одинаково. Например “казак”. LINE INPUT “Введите слово”;T$ M$=”” FOR I=LEN(T$) TO 1 STEP -1 M$=M$+MID$(T$,I,1) NEXT I IF T$=M$ THEN PRINT “Да является” ELSE PRINT “Нет не является” Функция INSTR ищет подстроку в строке начиная с позиции n. Если n не задано, то поиск осуществляется с первой позиции. Функция INSRT дает номер позиции, начиная с которой заданная подстрока появляется в исходной строке. Функция возвращает 0, если подстрока не найдена в строке. Формат: INSTR ([n],текст,подстрока) Например: T$=”информатика” A$=”форма” N=INSTR(1,T$,A$) ?N <На экране появится: 3> Пример 1. Задан текст. Подсчитать сколько раз в тексте встречается словосочетание “кот”. 1 способ: LINE INPUT “Введите текст”;T$ L=LEN(T$) FOR I=1 TO L IF MID(T$,I,3)=”кот” THEN K=K+1 NEXT I ? “Количество словосочетаний кот = ”;K 32 2 способ: LINE INPUT “Введите текст”;T$ T=INSTR(1,T$,”кот”) WHILE T<>0 K=K+1 T=INSTR(T+1,T$,”кот”) WEND ? “Количество словосочетаний кот = ”;K Пример 2. Задан текст, в котором есть несколько двоеточий. Напечатать текст между первыми двумя двоеточиями. LINE INPUT “Введите текст”;T$ T1=INSTR(1,T$,”:”) T2=INSTR(T1+1,T$,”:”) PRINT MID$(T$,T1+1,T2-T1-1) Пример 3. Задан текст. Подсчитать количество слов в первом предложении. Слова разделены пробелом. 1 способ LINE INPUT “Введите текст”;T$ K=1 PT=INSTR(T$,”.”) FOR I=1 TO PT IF MID$(T$,I,1)=” “ THEN K=K+1 NEXT I PRINT”Количество слов в первом предложении=”;K 2 способ LINE INPUT “Введите текст”;T$ K=1 I=1 WHILE MID$(T$,I,1)<>”.” IF MID$(T$,I,1)=” “ THEN K=K+1 I=I+1 WEND PRINT”Количество слов в первом предложении = ”;K Пример 4. Задан текст. Подсчитать количество слов «ученик» в последнем предложении. LINE INPUT “Введите текст”;T$ K=0 I= Len(T$)-1 WHILE MID$(T$,I,1)<>”.” B$= MID$(T$,I,8) IF B$=” ученик “ OR B$=” Ученик “ THEN K=K+1 I=I-1 WEND PRINT”Количество слов ученик в последнем предложении = ”;K 33 Функция INKEY$ или как получить власть над клавиатурой Функция INKEY$ предназначена для поддержки интерфейса между программой и клавиатурой. Предположим, необходимо создать паузу ожидания в определенном месте программы. Чтобы организовать такую паузу, нужно использовать условный цикл, в котором проверяется значение, возвращаемое функцией INKEY$. Например: PRINT “Нажмите любую клавишу WHILE INKEY$ = “” WEND В этом случае программа будет находиться в режиме ожидания до момента нажатия произвольной клавиши. Однако можно задать и конкретную клавишу, по нажатию на которую выполнение программы будет продолжено. Например: PRINT “Нажмите ‘ESC’ “ WHILE INKEY$ <> CHR$(27) WEND (27 – код ASCII для клавиши ‘ESC’) Каждая клавиша имеет свой код ASCII. Обращаясь к функции INKEY$, нельзя забывать, что она используется только вместе с условным циклом. ЗАДАНИЯ ПО ТЕМЕ «РАБОТА С ОДНОМЕРНЫМИ МАССИВАМИ» 1. Дан одномерный массив из N элементов. Посчитать среднее арифметическое элементов, кратных трем. 2. Проверить, все ли элементы одномерного массива разные. 3. Ввести одномерный массив из N элементов. Удалите из него числа, кратные трем. Дополнительный массив не создавать. 4. Дан одномерный массив, упорядоченный по возрастанию. С клавиатуры вводится число. Вставить это число в массив, не нарушая упорядоченности. Последний элемент вытеснить. 5. Ввести одномерный массив из N элементов. Изменить порядок следования значений элементов на обратный от позиции BEG до позиции FIN. 6. Ввести одномерный массив из N элементов. Произвести кольцевой сдвиг его элементов на K позиций. K вводят с клавиатуры, оно может быть как положительным, так и отрицательным. 7. Ввести одномерный массив из N случайных целых чисел в диапазоне от -L до +L. Вычислить среднее арифметическое квадратов отрицательных чисел; положительные элементы уменьшить вдвое, отрицательные заменить значениями их индексов. Вывести результирующий массив. 8. В одномерном массиве из N произвольных чисел поменять местами элементы, стоящие равноудаленно от элемента с заданным индексом K. Вывести на экран исходный и результирующий массив. 9. В одномерном массиве из N произвольных чисел изменить порядок следования элементов на обратный, на участках слева и справа от элемента с заданным индексом K. Вывести на экран исходный и результирующий массивы. 10. Пользователь вводи запас топлива для N районов. Выявить 3 района обладающих наибольшими запасами топлива. 11. Пользователь вводит расход энергии N предприятий. Вычислить средний расход энергии на одно предприятие номер предприятия с наименьшим расходом. 12. Пользователь вводит одномерный массив целых чисел. Вычислить среднее арифметическое и найти элемент массива, который всех ближе по значению к ср. ар. 13. Пользователь вводит одномерный массив целых чисел и некоторое число. Подсчитать количество элементов, значения которых меньше этого числа. 14. Пользователь вводит одномерный массив целых чисел. Сдвинуть все элементы массива влево на 1 элемент. Первый элемент при этом занимает место последнего. 15. Пользователь вводит одномерный массив целых чисел. Среди отрицательных элементов массива найти максимум 35 16. Пользователь вводит одномерный массив целых чисел. Вычислить количество идущих подряд отрицательных элементов массива, начиная с первого отрицательного элемента массива. 17. Пользователь задает диапазон и вводит одномерный массив целых чисел. Создать и распечатать одномерный массив, состоящий из индексов элементов введенного массива значения, которых удовлетворяют диапазону. 18. Пользователь вводит одномерный массив целых чисел. Распечатать индекс и значение положительного наименьшего числа. 19. Задан числовой массив, состоящий из 10 элементов. Определить, встречаются ли в этом массиве элементы, больше 50. Напечатать индексы этих элементов. 20. Задан числовой массив, состоящий из 9 элементов. Найдите произведение всех элементов, меньших максимального. 21. Задан числовой массив, состоящий из N элементов. Найти разницу между MAX и MIN элементами. 22. Задан числовой массив, состоящий из N элементов. Определить количество нечетных элементов стоящих на четных местах. 23. Задан числовой массив, состоящий из N элементов. Удалить из массива MAX и MIN элементы, оставшиеся элементы вывести на печать. 24. Задан числовой массив, состоящий из N элементов. Переставить местами элементы, стоящие на четных и нечетных местах. 25. Задан числовой массив, состоящий из N элементов. Определить количество различных чисел в массиве. 26. Задан числовой массив, состоящий из N элементов. Определить количество простых чисел в массиве. 27. Дан массив A из 15 элементов. Составить блок-схему и программу для вычисления 15 ln cos 3 a i2 . i1 28. Даны массивы A и В из 10 элементов. Составить блок-схему и программу для вычисле- ai e b ния . 2 i 1 10 i 10 29. Дан массив B(10). Составить блок-схему и программу для вычисления sin | bi | . i 1 30. Даны массивы A(10) и В(11). Составить блок-схему и программу для вычисления элементов массива d j 10 ai 2 a | b | , i 1 j где j=1,..,11 . i 36 ЗАДАНИЯ ПО ТЕМЕ «РАБОТА С ДВУМЕРНЫМИ МАССИВАМИ» 1. Дан двухмерный массив из М*N элементов. Посчитать сумму положительных чисел для каждой строки и количество положительных чисел во всем двухмерном массиве. 2. Дан двухмерный массив из М*N элементов. Посчитать количество строк с отрицательными элементами. 3. Ввести двумерный массив N x N. Определить минимальное значение для элементов, лежащих на главной диагонали, и максимальные значения для элементов, лежащих на побочной диагонали. 4. Ввести двумерный массив N x N. Определить произведение элементов, лежащих выше побочной диагонали. 5. Ввести двумерный массив N x N. Определить среднее арифметическое элементов, лежащих ниже главной диагонали. 6. Ввести числовую квадратную матрицу N x N элементов. Найти суммы элементов на периметрах всех вложенных квадратных подматриц, центр которых совпадает центром исходной матрицы. 7. Поменять местами элементы двух строк в двумерном массиве из M x N элементов. Номера строк вводятся с клавиатуры. 8. Ввести массив из M x N элементов. Повернуть его относительно горизонтальной оси. Дополнительных массивов не создавать. 9. Ввести массив из M x N элементов. Повернуть его относительно вертикальной оси. Дополнительных массивов не создавать. 10. Ввести квадратную матрицу из N x N элементов. Повернуть матрицу относительно главной диагонали. Дополнительных массивов не создавать. 11. Ввести квадратную матрицу из N x N элементов. Повернуть матрицу относительно побочной диагонали. Дополнительных массивов не создавать. 12. Ввести числовой массив (M строк, N столбцов). Преобразовать его в одномерный массив из M x N элементов. 13. Ввести числовой одномерный массив из M x N элементов. Преобразовать его в двумерный массив (M строк, N столбцов). 14. В двумерном массиве случайных чисел (M строк, N столбцов) определить номера столбцов, среднее арифметическое элементов которых меньше среднего арифметического элементов во всем массиве. 15. В двумерном массиве случайных чисел (M строк, N столбцов) переставить строки так, чтобы суммы их элементов возрастали. 16. Найти максимальный из элементов, расположенных выше n строки, а также сумму элементов четных строк. 37 17. Найти минимальный из элементов, расположенных выше побочной диагонали и поменять его местами с последним элементом. 18. Найти число неотрицательных элементов n столбца и произведение ненулевых элементов, расположенных выше главной диагонали. 19. Найти минимальный из элементов в области, ниже главной и выше побочной диагонали и поменять его местами с первым элементом матрицы. 20. Создать новый одномерный массив В из элементов исходной матрицы, удовлетворяющих условию 0 cos aij 0,5 . В полученном массиве поменять местами максимальный и минимальный элементы. 21. Найти количество нулевых элементов. Поменять местами минимальные элементы K и L строк. 22. Определить сумму элементов главной диагонали и минимальный элемент N строки. 23. Поменять местами K и L строки. В полученной матрице найти сумму элементов, расположенных ниже побочной диагонали. 24. Найти произведение ненулевых диагональных элементов, максимальный элемент K столбца и минимальный элемент L строки. 25. В матрице А(N,N) найти наибольший из элементов, удовлетворяющих условию cos2 aij 0,5 , и поменять его местами с первым элементом N столбца. 26. Создать новый одномерный массив, состоящий из произведений элементов матрицы А(6,4) по столбцам. 27. Найти строку, содержащую минимальный элемент матрицы А(5,7), и поменять ее местами с 4ой строкой. 28. В строке, содержащей максимальный элемент матрицы А(6,8), подсчитать сумму положительных элементов. 29. Найти сумму отрицательных элементов на побочной диагонали матрицы А(8,8), а также произведение ненулевых элементов в области выше главной диагонали. 30. В квадратной матрице А(7,7) найти число отрицательных элементов в области выше главной и ниже побочной диагонали. Поменять местами минимальный элемент первой строки и последний элемент матрицы. 38 ОГЛАВЛЕНИЕ ВВЕДЕНИЕ......................................................................................................................................... 3 Основы алгоритмизации ................................................................................................................... 4 Формальные сведения о BASIC ........................................................................................................ 5 Алфавит BASIC .............................................................................................................................. 5 Данные в языке BASIC .................................................................................................................. 5 Переменные ................................................................................................................................ 6 Константы ................................................................................................................................... 7 Встроенные функции ..................................................................................................................... 8 ОПЕРАТОРЫ BASIC......................................................................................................................... 9 Оператор комментариев ................................................................................................................ 9 Оператор ввода данных INPUT .................................................................................................... 9 Оператор вывода данных PRINT ................................................................................................ 10 Оператор окончания программы ................................................................................................ 10 Оператор присваивания............................................................................................................... 10 Операторы отношений ................................................................................................................ 11 Логические операторы................................................................................................................. 11 Оператор условного перехода if ................................................................................................. 12 Оператор ELSE ............................................................................................................................. 12 Оператор select.............................................................................................................................. 14 Оператор безусловного перехода goto ....................................................................................... 16 Оператор while ............................................................................................................................. 16 Оператор do-while ........................................................................................................................ 16 Оператор FOR............................................................................................................................... 17 РАБОТА С МАССИВАМИ ............................................................................................................. 22 Операторы basic при работе с массивами ...................................................................................... 22 Оператор описания массива DIMENSION ................................................................................ 22 Ввод и вывод массивов. Оператор INPUT, PRINT.Оператор DATA, READ. ........................ 22 Одномерные массивы .................................................................................................................. 24 Двумерные массивы ..................................................................................................................... 27 РАБОТА СО СТРОКОВЫМ ТИПОМ ДАННЫХ......................................................................... 30 Оператор LINE INPUT ............................................................................................................. 30 Операции со строковыми данными ........................................................................................ 30 Функции для работы с текстами ............................................................................................. 30 Функция INKEY$ или как получить власть над клавиатурой ................................................. 34 Задания по теме «Работа с одномерными массивами»................................................................. 35 Задания по теме «Работа с двумерными массивами» .................................................................. 37 39