Цель занятия: научить определять, заполнять, распечатывать одномерные массивы. А также Вы должны научиться алгоритмизировать и программировать простейшие типовые задачи обработки одномерных массивов.
Вам предлагается ознакомиться с этим вопросом через электронную лекцию, как работать с лекцией, Вы уже ознакомлены. В конце лекции приведены задачи для самостоятельной работы, законспектируйте их и выполните те, которые не вызывают особых затруднений. Невыполненные задачи – это Ваше домашнее задание. Для обязательного выполнения сегодня - 1, 3, 5, 7, 15
Определение, заполнение, печать одномерных массивов. Простейшие программы обработки одномерных массивов.
SCREEN 9: COLOR 14, 1: CLS : RANDOMIZE TIMER
''*Одномерный массив - множество, поставленное в соответствие
'*натуральным числам. В математике это - индексированные переменные
'*Определение, заполнение и вывод одномерного массива **********
'*Примеры простейших задач на двумерные массивы **********
'**** Это задание, определение двумерного массива ********
'PRINT TAB(10); : INPUT "Сколько элементов в массиве?"; n
'DIM x(n)
'*Число элементов можно задать оператором LET или определить'*массив с определенным числом элементов: DIM x(12)
'*В одной строке с оператором DIM можно задавать несколько массивов:
'*DIM a(10),b(n),c(m)
'*Необходимо помнить, что строка с оператором DIM должна обрабатываться
'*программой только ОДИН РАЗ, иначе - ошибка, узнайте какая...
'*А теперь каждую программку законспектируйте, снимите REM
'*и можете запускать на проверку, убеждаясь в их работе'*Заполнение одномерного массива с клавиатуры*******
'INPUT "Сколько элементов в массиве"; n
'DIM x(n)
'FOR i = 1 TO n
'PRINT "x("; i; ") ="; : INPUT x(i)
'NEXT j, i
'*** А это программка распечатки массива ********
'FOR i = 1 TO n
'PRINT x(i)
'*Проверьте как будет распечатываться массив, если после х(i) поставить ;или,
'NEXT i
'**** А это заполнение массива случайными числами********
'*Не забудьте вначале определить массив
'PRINT TAB(10); : INPUT "из какого отрезка a,b брать значения x(i)"; a, b
'FOR i = 1 TO n:x(i) = INT(a + (b - a) * RND):NEXT i
'*****************************************************
'***А так его можно ввести с помощью DATA-READ ************
'***Здесь располагайте элементы массива, их должно быть n ************
'DATA 2,6,-8,6,4,6,7,8,9,0,6,8
'FOR i = 1 TO n:READ x(i):NEXT i
'*Элементы массива можно определить и по заданной формуле **'* Например
'FOR i = 1 TO n
'x(i) = (i ^ 3 + SQR(i + 1)) / i
'NEXT i
'*Последнее замечание. Если элементов в массиве меньше 10, то массив
'*определяется средой QBASIC по умолчанию, т.е. оператор DIM в программе
'*можно не размещать, чего делать не советуем...
'*** Хорошо разберитесь с тем, что прочитали и законспектировали ***
'*** А далее, собственно, решение типовых задач обработки массивов**
'Приведем примеры. Задача1 . В одномерном целочисленном массиве содержатся
'положительные и отрицательные элементы. Найти их средние арифметические
'PRINT TAB(10); : INPUT "Сколько элементов в массиве?"; n
'DIM x(n)
'PRINT TAB(10); : INPUT "Из какого отрезка a,b брать значения x(i)"; a, b
'FOR i = 1 TO n
'x(i) = INT(a + (b - a) * RND)
'PRINT x(i);
'NEXT i
'sp = 0: so = 0: kp = 0: ko = 0
'FOR i = 1 TO n
'IF x(i) > 0 THEN kp = kp + 1: sp = s + sp
'IF x(i) < 0 THEN ko = ko + 1: so = s + sp
'NEXT i
'sap = sp / kp: sao = so / ko'*Выводим ответ
'PRINT TAB(10);"Среднее арифметическое положительных ";sap
'PRINT TAB(10);"Среднее арифметическое отрицательных ";sao
'*Задача 2. Выяснить есть ли в одномерном целочисленном
'* массиве, в котором содержатся положительные и отрицательные элементы
'* противоположные элементы, вывести их на печать или выдать сообщение
'* что противоположных нет
'INPUT "Сколько элементов в массиве"; n
'DIM x(n)
'a = -4: b = 5
'FOR i = 1 TO n: x(i) = INT(a + (b - a) * RND): PRINT x(i); : NEXT i
'PRINT : PRINT
'k = 0
'FOR i = 1 TO n - 1: FOR j = 1 + i TO n
'IF x(i) = -x(j) AND x(i) <> 0 THEN
'PRINT TAB(10); "x("; i; ") = - x("; j; ")", , x(i), x(j)
'k = k + 1
'END IF
'NEXT j, i
'IF k = 0 THEN PRINT TAB(5); "Как видите, противоположных нет"
'* Еще простейшие задачи, перепишите их в конспект, решайте ***********
'* их сейчас, решайте дома, консультируйтесь друг с другом *************
'* Итак, задан одномерный целочисленный массив, содержащий положительные*
'* и отрицательные элементы, заполните его случайными числами и распечатайте*
'*1) Найти сумму его четных и нечетных элементов*
'*2) Найти сумму элементов, кратных 6 или выдать сообщение, что таких нет*
'*3) Найти сумму элементов, больших введенного пользователем числа*
'*4) Найти количество больших среднего арифметического всех элементов*
'*5) Отрицательные элементы заменить единицами **
'*6) Заменить отрицательные элементы их модулями *******************
'*7) Вывести на печать вместе с индексами элементы, кратные трем ********'*8) Вывести на печать суммы элементов с четными и нечетными индексами*
'*9)Подсчитать сколько раз в массиве встречается максимальный элемент*
'*10)Найти наименьший положительный элемент*
'*11)Найти элементы массива, значения которых совпадают с индексом*
'*12)Заменить каждый элемент массива суммой предыдущих*
'*13)Изменить знак всех нечетных элементов*
'*14)Подсчитать количество четных элементов, имеющих нечетные индексы*
'*15)Подсчитать сколько раз встречается в массиве элементы равные заданному ‘**числу, введенному пользователем
'* И так далее. *
'* Успехов в освоении операций над массивами! Следующее занятие – контроль усвоения.
Приведем для примера несколько программ, реализующие несложные задачи по обработке одномерных массивов.
SCREEN 9: COLOR 14, 1: CLS
'****Задача 12*****
'****Заменить элементы массива, начиная со второго суммой предыдущих*****
INPUT "Сколько элементов в Вашем массиве"; n
a = 2: b = 12
DIM x(n)
FOR i = 1 TO n
x(i) = INT(a + (b - a) * RND)
PRINT x(i);
NEXT i
PRINT : PRINT
FOR i = 2 TO n
x(i) = x(i) + x(i - 1)
NEXT i
FOR i = 1 TO n: PRINT x(i); : NEXT i
Вам предстоит не только составлять программы обработки одномерных массивов, но и “защищать” свои работы, это предстоит и на устном экзамене. Поэтому приведем программу с подробным комментарием: что надо знать при защите работ.
Элементы массива х(12) принимают значения натуральных чисел из интервала (1; 10). Вывести на печать значения и индексы тех элементов, которые равны своему индексу.
После каждой строки следует комментарий. Номера строк поставлены для того, чтобы сделать этот комментарий понятным
SCREEN 9
Эта строка, как помните, определяет экранный режим: 25 строк, 80 позиций по горизонтали
COLOR 14, 1
Оператор устанавливает цветовой режим: желтый – цвет символов, голубой – цвет фона
CLS
Очистка экрана
RANDOMIZE TIMER
Элементам массива будем присваивать случайные значения, чтобы при каждом запуске они принимали различные значения, запускаем генератор случайных чисел
DIM x(12)
Определяем массив, имя элементов – “х”, их количество 12
5 FOR i = 1 TO 12
Открываем цикл по параметру i, который изменяется от 1 до 12 с шагом 1
x(i) = INT(1 + 10 * RND)
Всем 12-ти элементам массива присваиваем случайные натуральные значения из указанного интервала
PRINT x(i);
Выводим на печать значения элементов массива в строку – “;”
NEXT i
Если i < 12 то управление передается на строку 5, если i = 12, то управление передается на следующую строку 10
10 PRINT
Т.н. “пустой PRINT”, он вводится с тем, чтобы последующая информация выводилась на следующей строке после вывода элементов массива, т.е. “отменяет” “;”
k = 0
Присваиваем переменной k нулевое значение. Это т.н. “признак”, если нужные элементы будут найдены, то этот признак будет изменен, если нет – то у k останется нулевое значение
12 FOR i = 1 TO 12
Открываем цикл по параметру i, который изменяется от 1 до 12 с шагом 1
15 IF x(i) = i THEN
Ставим условие, оговоренное в условии задачи: элемент равный своему индексу, если такой элемент будет найден, то будет исполняться блок 15- 30 иначе управление будет передано на строку 35
20 PRINT TAB(10); "x("; i; ")="; i
Печать соответствующего элемента вместе с индексом
25 k = 1
Изменение признака в связи с выполнением условия в строке 15
30 END IF
Прекращение действия условия строки 15
35 NEXT i
Если i < 12 то I увеличивается на 1 и управление передается на строку 12, если i = 12, то управление передается на следующую строку 40
40 IF k = 0 THEN PRINT "Таких элементов нет"
Вывод отрицательного результата
Переменную k определили как признак. Но можно под этой переменной подразумевать т.н. счетчик. Для этого изменить строку 25 k = k + 1 и вывод результата осуществить так:
40 IF k > 0 THEN PRINT “Как видите таких элементов ровно”; k ; ELSE PRINT "Таких элементов нет"
Выполняя домашнее задание старайтесь комментировать каждую строку так или примерно так, как это было сделано выше.
Какими знаниями Вы овладели, какие умения Вы приобрели на занятии №14?