Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
SCREEN 9: COLOR 14, 1
2 CLS
PRINT TAB(22); : INPUT "Введите x, y,z"; x, y, z
t = x: 'Присвоение t значения x, т. к. в подпрограмме
'использована переменная t
GOSUB 100: 'Идем в подпрограмму с переменной t
p = b: 'Запоминаем значение первого корня в переменной p
t = y: 'Присвоение t значения
GOSUB 100: 'Идем в подпрограмму с переменной t
q = b: 'Запоминаем значение второго корня в переменной q
t = z: 'Присвоение t значения z
GOSUB 100: 'Идем в подпрограмму с переменной t
s = p / (q + b):’**Вычисляем значение выражения
COLOR 7: PRINT TAB(18); "Записывайте ответ"; s: COLOR 14
PRINT TAB(22); "1 - новые данные, 2 - окончание работы"
PRINT TAB(22); "Нажмите соответствующую клавишу"
5 g$ = INKEY$
IF g$ = "1" THEN 2 ELSE IF g$ = "2" THEN STOP ELSE 5
100 '***Подпрограмма вычисления корня******
b = SQR((t + 2) ^ 2 + ABS(t + EXP(-t)))
RETURN
2.Как известно, автомобильные номера – это буквы с тремя цифрами. Если сумма этих цифр номера равна 7 – такой номер будем считать счастливым, а если 13 – это несчастливый номер. Сколько автомобилей, имеющих разные номера, имеют счастливые и несчастливые номера?
,,,,,,,,,,,,,,,,,,,,,,,,,Программа 12.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SCREEN 9: COLOR 14, 1
CLS
GOTO 20
10 '******Подпрограмма суммирования цифр*******
m = n: p = n: 'переменным m и p присвоили значения n
ts = n \ 100: 'выделяем первую цифру - сотни
ds = (m - ts * 100) \ 10: 'выделяем вторую цифру - десятки
ed = p - ts * 100 - ds * 10: 'выделяем третью цифру - единицы
s = ts + ds + ed: 'суммируем
RETURN
20 k7 = 0: k13 = 0: 'обнуляем счетчики
FOR i = 0 TO 999
n = i: GOSUB 10: 'переменной n присваиваем значение i и направляемся в подпрограмму
IF s = 7 THEN k7 = k7 + 1
IF s = 13 THEN k13 = k13 + 1
NEXT i
PRINT TAB(20); "Счастливых номеров"; k7
PRINT TAB(20); "Несчастливых номеров"; k13
Изменим программу с тем, чтобы она не только подсчитывала количество нужных нам номеров, но и распечатывала их
,,,,,,,,,,,,,,,,,,,,,,,,,Программа 12.2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
GOTO 20
10 '******Подпрограмма суммирования цифр*******
m = n: p = n : ts = n \ 100: ds = (m - ts * 100) \ 10
ed = p - ts * 100 - ds * 10
s = ts + ds + ed
RETURN
20 k7 = 0
FOR i = 0 TO 999
n = i: GOSUB 10
IF s = 7 THEN k7 = k7 + 1: PRINT i;
NEXT i
PRINT TAB(20); "Счастливых номеров"; k7
PRINT : PRINT : PRINT : PRINT : PRINT
k13 = 0
FOR i = 0 TO 999
n = i: GOSUB 10
IF s = 13 THEN k13 = k13 + 1: PRINT i;
NEXT i
PRINT TAB(20); "Несчастливых номеров"; k13
Мы уже рассматривали задачу табулирования функции. А что, если функция задана не одной формулой, а различными для различных значений аргумента, например, так:

Это означает, что вычисление значений функции необходимо находить в подпрограмме.
,,,,,,,,,,,,,,,,,,,,,,,,,Программа 12.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SCREEN 9: CLS
COLOR 14, 8
LOCATE 2, 5
INPUT "введите отрезок a, b"; a, b
PRINT TAB(5); : INPUT "число строк таблицы"; n
h = (b - a) / n
PRINT TAB(15); "x"; TAB(30); "y"
FOR x = a TO b STEP h
GOSUB 10
PRINT TAB(10); x; TAB(25); y
NEXT x
END
10 '***** подпрограмма вычисления значения функции *******
IF x <= -1 THEN y = x ^ 3 + 3 * x ^ 2 + 3 * x + 2
IF x > -1 AND x <= 1 THEN y = x ^ 2
IF x > 1 THEN y = (x + 4) / (3 * x + 2)
RETURN
Найти значение функции:
, если a = 17°, b = 23°, c = 39°, d = 43°
,,,,,,,,,,,,,,,,,,,,,,,,,Программа 12.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SCREEN 9: CLS
COLOR 14, 8
pi = 4 * ATN(1)
READ a, b, c, d
x = a * pi / 180: y = b * pi / 180
GOSUB 200
z1 = w 'это числитель
x = c * pi / 180: y = d * pi / 180
GOSUB 200
z2 = SQR(w) 'это знаменатель
z = z1 / z2:
LOCATE 10, 10: PRINT "z="; z
END
200 '***** подпрограмма ******
w = COS(x) + SIN(y) + 3
RETURN
DATA 17,23,39,43
Задания для самостоятельной работы
12.5. Написать письмо стандартной формы, адресованное различным людям. Текст письма расположить в подпрограмме.
12.6 Вычислить:

Вычисление выражения
организовать в подпрограмме.
12.7Величина x изменяется от -5 до 5 с шагом 1. найти сумму значений
. Вычисление y организуйте в подпрограмме.
Какими знаниями Вы овладели, какие умения и навыки Вы приобрели на занятии №12?
· познакомились с понятием «подпрограмма», условия реализации программ, содержащих подпрограммы;
· научились работать с электронной лекцией: снимаем REM в нужном месте и запускаем программу, нет необходимости вводить эту программу – очень эффективная форма работы;
· рассмотрели конкретные интересные задачи, программная реализация которых требует применения подпрограмм;
· научились суммировать цифры натурального числа;
· получили навыки в умении программно реализовать несложные текстовые задачи, требующие организации подпрограмм.
Занятие 13
Составление и отладка более сложных программ, содержащих выбор, циклы и подпрограммы. Итоговое занятие по теме.
Мы изучили конструкции ветвления, научились программировать циклы типа «До» и «После» с помощью IF…THEN, DO…LOOP и FOR…NEXT, умеем использовать подпрограммы.
Настоящее занятие – подведение итогов по изученному материалу, закрепление и проверка Ваших умений и навыков.
Несколько задач подробно разберем совместно. Затем Вам будут предложены задачи для самостоятельной разработки.
1.Задача. даны три числа, проверить, могут ли они являться сторонами треугольника, если «да», то вычисление его медиан и высот организовать в подпрограммах. В результате работы программы выдать длины медиан и высот.
________________Программа 13.1________________
10 CLS
PRINT TAB(15); "Введите три числа, выражающие стороны треугольника";
INPUT a, b, c
REM**Из трех чисел выбираем наибольшее и сохраняем в а**
IF b > a AND b > c THEN SWAP a, b
IF c > a AND c > b THEN SWAP a, c
REM**Проверяем, могут ли они быть сторонами треугольника**
IF a ^ 2 > b ^ 2 + c ^ 2 THEN
PRINT TAB(10); "Вы не правы - это не треугольник"
PRINT TAB(10); "Нажмите пробел и введите три числа снова"
DO: LOOP WHILE INKEY$ <> " ": GOTO 10: '**Обратите внимание на
'**эту конструкцию и применяйте ее в дальнейшем*****
END IF
p = (a + b + c) / 2: s = SQR(p * (p - a) * (p - b) * (p - c))
REM*** Это вычислили полупериметр и площадь по формуле Герона
REM** Организуем меню выбора*****
15 CLS : t = 0
LOCATE 5, 30: PRINT "Будете вычислять:"
PRINT TAB(32); "M - медианы"
PRINT TAB(32); "V - высоты"
PRINT TAB(26); "Нажмите соответствующую клавишу"
'**Выбор медианы или высоты****
20 a$ = INKEY$
IF a$ = "M" OR a$ = "m" OR a$ = "ь" OR a$ = "Ь" THEN t = 1
IF a$ = "V" OR a$ = "v" OR a$ = "М" OR a$ = "м" THEN t = 2
IF t = 1 THEN 22
IF t = 2 THEN 24 ELSE 20
IF t = 1 THEN
22 PRINT TAB(35); "Записывайте:"
x = a: y = b: z = c: GOSUB 30: PRINT TAB(32); "m1 = "; m
x = a: y = c: z = b: GOSUB 30: PRINT TAB(32); "m2 = "; m
x = b: y = c: z = a: GOSUB 30: PRINT TAB(32); "m3 = "; m
END IF
IF t = 2 THEN
24 PRINT TAB(35); "Записывайте:"
x = a: GOSUB 40: PRINT TAB(32); "v1 = "; v
x = b: GOSUB 40: PRINT TAB(32); "v2 = "; v
x = c: GOSUB 40: PRINT TAB(32); "v3 = "; v
END IF
'**И очередной диалог с пользователем*****
LOCATE 15, 30: PRINT "Продолжение"
PRINT TAB(32); "N - новый треугольник"
PRINT TAB(32); "D - другие элементы этого треугольника"
PRINT TAB(32); "T - Окончание работы"
PRINT TAB(26); "Нажмите соответствующую клавишу"
25 a$ = INKEY$
IF a$ = "N" OR a$ = "n" OR a$ = "Т" OR a$ = "т" THEN 10
IF a$ = "D" OR a$ = "d" OR a$ = "В" OR a$ = "в" THEN 15
IF a$ = "T" OR a$ = "t" OR a$ = "Е" OR a$ = "е" THEN END ELSE 25
30 '******Подпрограмма вычисления медиан*
m = SQR(2 * x ^ 2 + 2 * y ^ 2 - z ^ 2) / 2
RETURN
40 '******Подпрограмма вычисления высот*
v = 2 * s / x
RETURN
2.Интереснейшая познавательная задача. В какой день Вы родились? Сколько дней прожили на свете? Вы хотите узнать? Пожалуйста, компьютерная программа ответит на эти вопросы!
Только воспользуйтесь формулами.
Число дней после 01,01,1700 до любой даты до 28.02.2100 вычисляется по формулам:
Для января и февраля:
n = [ 365,25(g – 1) ] + [30,6(m + 13)] + d - 621049
Для остальных месяцев:
n = [ 365,25g ] + [30,6(m + 1)] + d – где квадратные скобки означают целую часть выражения, т. е. функция INT. d, m, g – соответственно день, месяц, год указанной даты, n – число дней после 01.03.1700 до введенной Вами даты. По параметру w можно найти день недели указанной даты, разберитесь по листингу программы, как это можно сделать.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
SCREEN 9: COLOR 14, 1
CLS
PRINT : PRINT
PRINT TAB(10); : INPUT "Введите сегодняшний день месяц год "; d, m, g
dd = d: mm = m: gg = g
GOSUB 40: s = nn
10 CLS : PRINT TAB(10); : INPUT "Введите день месяц год Вашего рождения"; d, m, g
dd = d: mm = m: gg = g
GOSUB 40: s1 = nn
t = s - s1
PRINT TAB(30); "Вы прожили"; t; " дней"
GOSUB 50: PRINT TAB(30); "Ваш день рождения "; : PRINT ; a$
PRINT : PRINT
'**Диалог с пользователем*
PRINT TAB(10); "1 - для друго дня рождения или 2 - выход"
PRINT TAB(10); "Нажмите соответствующую клавишу"
30 a$ = INKEY$
IF a$ = "1" THEN 10
IF a$ = "2" THEN END ELSE 30
40 '**Подпрограмма. Число дней после 1,1,1700 **
IF mm <= 2 THEN nn = INT(365.25 * (gg - 1)) + INT(30.6 * (mm + 13)) + dd - 621049
IF mm > 2 THEN nn = INT(365.25 * gg) + INT(30.6 * (mm + 1)) + dd - 621049
RETURN
50 '******* Подпрограмма. Определение дня недели
f = 365 * g + d + 31 * (m - 1)
IF m <= 2 THEN f = f + INT((g - 1) / 4) - INT(3 * (INT((g - 1) / 100 + 1)) / 4)
f = f - INT(.4 * m + 2.3) + INT(g / 4)
f = f - INT((.75 * (INT(Y / 100) + 1)))
w = f + (-INT(f / 7) *
IF w = 1 THEN a$ = "воскресение" ELSE IF w = 2 THEN a$ = "понедельник"
IF w = 3 THEN a$ = "вторник" ELSE IF w = 4 THEN a$ = "среда"
IF w = 5 THEN a$ = "четверг" ELSE IF w = 6 THEN a$ = "пятница"
IF w = 0 THEN a$ = "суббота"
RETURN
3.Мы с Вами на первых занятиях программировали игру «Угадай число». Теперь распространим ее на числовую плоскость. Ваша программа генерирует два натуральных числа из (0; 100), те координаты точки. Вы должны найти эту точку. В научно – популярной литературе эта игра называется почему-то «Медвежья берлога», которую необходимо отыскать, пользуясь подсказками Вашей программы: «налево и прямо», «назад», «направо и назад» и т. д. Как и в простой программе считать количество попыток.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
CLS : SCREEN 9: COLOR 14, 1
RANDOMIZE TIMER
x0 = 1 + INT(99 * RND): y0 = 1 + INT(99 * RND)
PRINT TAB(10); x0, y0
k = 0
10 PRINT TAB(10); : INPUT "Ваши координаты"; x, y: k = k + 1
xp$ = "направо": xl$ = "налево"
yv$ = "вверх": yn$ = "вниз"
i$ = " и "
tx = SGN(x0 - x): ty = SGN(y0 - y)
IF tx = 1 AND ty = 1 THEN PRINT TAB(10); xp$; i$; yv$
IF tx = 1 AND ty = 0 THEN PRINT TAB(10); xp$
IF tx = 1 AND ty = -1 THEN PRINT TAB(10); xp$; i$; yn$
IF tx = 0 AND ty = -1 THEN PRINT TAB(10); yn$
IF tx = -1 AND ty = -1 THEN PRINT TAB(10); xl$; i$; yn$
IF tx = -1 AND ty = 0 THEN PRINT TAB(10); xl$
IF tx = -1 AND ty = 1 THEN PRINT TAB(10); xl$; i$; yv$
IF tx = 0 AND ty = 1 THEN PRINT TAB(10); yv$
IF tx = 0 AND ty = 0 THEN PRINT TAB(5)"Нашел с "; k; "попыток"; x; y ELSE 10
А теперь найдем отгаданную точку с помощью вложенных циклов
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
x0 = 1 + INT(99 * RND): y0 = 1 + INT(99 * RND)
FOR x = 1 TO 99
FOR y = 1 TO 99
IF x = x0 AND y = y0 THEN PRINT TAB(5); "Берлога в точке "; x; y
NEXT y, x
5.Вы находили на предыдущих занятиях длину дуги плоской кривой, она была задана одной формулой в операторе DEF FN. А что если функция задана различными выражениями при различных значениях аргумента?
Например:

Это значит, что необходимо организовать подпрограмму по вычислению значений функции.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
SCREEN 9: COLOR 14, 1
CLS
s = 0
PRINT TAB(10); : INPUT "Начальное и конечное значения аргумента"; a, b
h = (b - a) / 1000
FOR x = a TO b - h STEP h
GOSUB 10: y1 = y
x = x + h
GOSUB 10
dl = SQR((y1 - y) ^ 2 + h ^ 2)
s = s + dl
NEXT x
PRINT TAB(10); "Длина дуги равна"; s
END
10 REM******* Подпрограмма вычисления значений функции
IF x < -1 THEN y = x ^ 3 + 2
IF x >= -1 AND x <= 1 THEN y = x ^ 2
IF x > 1 THEN y = EXP(x - 1)
RETURN
В заключение итогового занятия спрограммируйте самостоятельно следующие задачи.
6. А теперь очень легкое упражнение. Напишите письмо стандартной формы, адресованное различным людям. Текст письма расположите в подпрограмме.
7.Определите и напечатайте 5 случайных двузначных целых чисел, сумма которых равна 100.
8.Используя циклы по аргументам оператора LOKATE обрамите экран монитора 2-3-мя рядами каких-нибудь символов, которые имеют различные, случайные цвета.
9.Используя циклы по аргументам оператора LOKATE, напечатайте свое имя лесенками по основной и вспомогательной диагоналям.
10.Дано трехзначное натуральное число. Напечатать его цифры и составить из этих цифр путем их перестановки другие трехзначные числа, например: 123 – это задано пользователем. Пусть Ваша программа найдет 132, 213, 231, 312, 321.
11.Пользователь задает положительное «а» и натуральное n. Возведите «а» в степень n не пользуясь операцией возведения в степень «^».
12.Пользователь задает целое положительное число а. Среди чисел:

найдите первое, превышающее заданное а.
Какими знаниями Вы овладели, какие умения и навыки Вы приобрели на занятии №13?
· на конкретных примерах закрепили понятие «подпрограмма», условия реализации программ, содержащих подпрограммы;
· познакомились с реализацией ряда занимательных задач;
· рассмотрели конкретные интересные задачи, программная реализация которых требует применения подпрограмм и циклов;
· научились оформлять экран монитора иcпользуя циклы в операторе LOCATE;
· получили навыки в умении программно реализовать несложные текстовые задачи, требующие организации подпрограмм и циклов.
Занятие 14. Одномерные массивы:
определение, заполнение, печать.
Цель занятия: научить определять, заполнять, распечатывать одномерные массивы. А также Вы должны научиться алгоритмизировать и программировать простейшие типовые задачи обработки одномерных массивов.
Вам предлагается ознакомиться с этим вопросом через электронную лекцию, как работать с лекцией, Вы уже ознакомлены. В конце лекции приведены задачи для самостоятельной работы, законспектируйте их и выполните те, которые не вызывают особых затруднений. Невыполненные задачи – это Ваше домашнее задание. Для обязательного выполнения сегодня - 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
Ставим условие, оговоренное в условии задачи: элемент равный своему индексу, если такой элемент будет найден, то будет исполняться блок иначе управление будет передано на строку 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?
· Познакомились с одномерными массивами, усвоили оператор DIM
· Конспектируя электронную лекцию усвоили как определяется массив;
· Усвоили способы присвоения элементам массива значений;
· Т. к. мы не решаем конкретные технические и экономические задачи, то в большинстве случаев будем «заполнять» массив случайными числами, интервал для них может задавать пользователь или программист оператором LET;
· Рассмотрели примеры задач на обработку одномерного массива;
· Ознакомились с методикой «защиты» своих программ по обработке одномерных массивов.
Занятие 15. Типовые задачи обработки
одномерных массивов
Цель занятия: оценить понимание электронной лекции, умений определять, заполнять и распечатывать одномерные массивы, программировать простейшие операции обработки одномерных массивов. Таким образом, настоящее занятие – продолжение и развитие первого занятия по одномерным массивам.
Контрольные вопросы для проведения занятия.
*Что есть одномерный массив, привести примеры использования индексированных переменных в других дисциплинах.
*Какой оператор ОПРЕДЕЛЯЕТ массивы?
*Способы присвоения значений элементам массива.
*Как вывести элементы массива на печать?
*Как можно классифицировать задачи по обработке одномерных массивов.
Итак, массив можно определить, спросив у пользователя количество элементов, или определить их количество в операторе DIM:
DIM х(12), у(20). В тренировочных упражнениях будем присваивать значения элементам массива случайные значения, взятые из интервала (а; b) Значения a и b лучше задавать оператором LET.
Запомните! Прежде чем решать задачу на обработку массива, его сначала необходимо ОПРЕДЕЛИТЬ, ПРИСВОИТЬ ЗНАЧЕНИЯ ЕГО ЭЛЕМЕНТАМ, РАСПЕЧАТАТЬ. И только затем в новом цикле приступать к его обработке, т. у. решению задачи.
Условно классифицируем типовые задачи на обработку одномерных массивов.
-поиск и вывод элементов массива по какому-либо условию
-замена элементов массива по какому-либо признаку
-подсчет количества элементов по какому-либо признаку
-суммирование элементов массива по какому-либо признаку
Теперь рассмотрите программы, прокомментируйте их работу, подробно объясните каждую строку. В целях сокращения объема разработки настоящего занятия в некоторых строках через двоеточие помещено более чем более одного оператора. Вы же, вводя программы в память ЭВМ, каждый оператор размещайте в отдельной строке, в таком случае программа будет легче читаться, в ней лучше находить ошибки.
SCREEN 9: COLOR 14, 1: CLS
RANDOMIZE TIMER
'*Из букв своей фамилии сформировать символьный массив. Распечатать его
'*слева на право и с права на лево
'SCREEN 9: COLOR 14, 1: CLS : LOCATE 10, 30
'DATA Р, о,м, а,с, ь
'DIM a$(6)
'FOR i = 1 TO 6:'READ a$(i): 'PRINT a$(i);
'NEXT i
'PRINT : PRINT :
'FOR i = 6 TO 1 STEP -1
'PRINT a$(i);
'NEXT i
'*Дан массив. Напечатать индексы и количество элементов, равных 0
'*Если таких нет, сделать соответствующее сообщение
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'a = -5: b = 5
'DIM x(n)
'FOR i = 1 TO n
'x(i) = CINT(a + (b - a) * RND): 'PRINT x(i);
'NEXT i:'PRINT
'k = 0
'FOR i = 1 TO n
'IF x(i) = 0 THEN 'k = k + 1:'PRINT "x("; i; ")="; x(i)
'NEXT i
'IF k > 0 THEN PRINT "Нулевых элементов"; k; ELSE PRINT "Нулевых элементов нет"
'*Определить и вывести на печать, первое отрицательное значение массива
'*b(n) вместе с индексом. Массив содержит положительные и отрицательные
'*элементы.
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'a = -3: b = 3
'DIM x(n)
'FOR i = 1 TO n
'x(i) = CINT(a + (b - a) * RND): PRINT x(i);
'NEXT i: 'PRINT
'FOR i = 1 TO n
'IF x(i) < 0 THEN
'PRINT "x("; i; ")="; x(i)
'i = n: '**Обратите внимание на эту строку!
'END IF
'NEXT i
'PRINT "Это первый отрицательный элемент"
'*Информация о среднесуточной температуре за месяц хранится в массиве
'*Определить среднемесячную температуру, количество дней, когда
'*температура была ниже нуля.
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'DIM a(30)
'a = -5: b = 20
's = 0: '*Обнуляем сумму для подсчета средней температуры за месяц
't = 0: '* Обнуляем счетчик для подсчета дней когда температура ниже нуля
'FOR i = 1 TO 30: a(i) = INT(a + (b - a) * RND)
's = s + a(i): 'PRINT a(i);
'NEXT i: 'PRINT
'cr = s / 30
'FOR i = 1 TO 30
'IF a(i) < 0 THEN t = t + 1
'NEXT i: PRINT
'PRINT "В месяце "; t; " дней имели температуру ниже нуля"
'PRINT "Среднемесячная температура равна "; cr
'*В распечатке массива выделить отдельными цветами максимальный и
'*минимальный элементы.
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'DIM a(n)
'a = -9: 'b = 13
'max = a(1): min = a(1)
'FOR i = 1 TO n: a(i) = INT(a + (b - a) * RND)
'PRINT a(i);
'NEXT i: PRINT
'FOR i = 1 TO n
'IF a(i) > max THEN max = a(i)
'IF a(i) < min THEN min = a(i)
'NEXT i
'FOR i = 1 TO n
'IF a(i) = max THEN COLOR 15
'IF a(i) = min THEN COLOR 10
'PRINT a(i);
'COLOR 14
'NEXT i
'*В произвольном массиве подсчитать количество нечетных элементов,
'*имеющих четные индексы
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'DIM a(n)
'a = -9: 'b = 13
'k = 0
'FOR i = 1 TO n: 'a(i) = INT(a + (b - a) * RND)
'PRINT a(i);
'NEXT i: PRINT
'FOR i = 1 TO n
'IF (a(i) / 2 <> a(i) \ 2) AND (i / 2 = i \ 2) THEN k = k + 1
'NEXT i
'PRINT "Количество нечетных элементов имеющих четные индексы равно "; k
'*Вывести суммы элементов с четными и нечетными индексами
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'DIM a(n)
'a = -9: b = 13
'k = 0: '*Обнуляем сумму элементов с четными индексами
't = 0: '*Обнуляем сумму элементов с нечетными индексами
'FOR i = 1 TO n: 'a(i) = INT(a + (b - a) * RND)
'PRINT a(i);
'NEXT i: PRINT
'FOR i = 1 TO n
'IF i / 2 = i \ 2 THEN k = k + a(i)
'IF i / 2 <> i \ 2 THEN t = t + a(i)
'NEXT i
'PRINT "Сумма элементов с четными индексами равна "; k
'PRINT "Сумма элементов с нечетными индексами равна "; t
'*Дан одномерный массив a(n). Вывести на печать значения, индексы и
'*количество отрицательных элементов
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'DIM a(n)
'a = -9: b = 13: k = 0
'FOR i = 1 TO n: a(i) = INT(a + (b - a) * RND)
'PRINT a(i);
'NEXT i
'FOR i = 1 TO n
'IF a(i) < 0 THEN PRINT "x("; i; ") = "; a(i): k = k + 1
'NEXT i
'PRINT "Кол-во отрицательных элементов равно "; k
'*Вывести на печать равные элементы массива вместе с их индексами
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'DIM a(n)
'FOR i = 1 TO n: 'a(i) = INT(10 * RND + 1): PRINT a(i);
'NEXT i: PRINT
'FOR i = 1 TO n - 1
'FOR j = i + 1 TO n
'IF (a(i) = a(j)) THEN PRINT "x("; i; ") = x("; j; ") = "; a(i)
'NEXT j: NEXT i
'*Дан массив a(n) и число С. Найти сумму элементов которые меньше заданного С
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'INPUT "Введите число С"; c
'DIM a(n)
'k = 0
'FOR i = 1 TO n: a(i) = INT(10 * RND + 1): PRINT a(i);
'NEXT i
'FOR i = 1 TO n: IF a(i) < c THEN k = k + a(i)
'NEXT i: 'PRINT
'PRINT "Сумма чисел меньших С равна "; k
'*Элементы массива a(n) принимают только значения 1,2 и 3.
'*переставьте его элементы так чтобы в начале находились элементы
'*равные 1, затем 2, а в конце 3
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
'DIM a(n)
'a = 1: b = 4
'FOR i = 1 TO n: a(i) = INT(a + (b - a) * RND)
'PRINT a(i);
'NEXT i: PRINT
'FOR j = 1 TO n
'FOR i = 1 TO n - 1
'IF a(i) > a(i + 1) THEN SWAP a(i), a(i + 1)
'NEXT i: 'NEXT j
'FOR i = 1 TO n: PRINT a(i);: NEXT i
'*В массиве хранится информация о стоимости 30 видов товаров.
'* Найти стоимость двух самых дорогих товаров
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'DIM a(30)
'a = 100: b = 1000: max = 0
'FOR i = 1 TO 30
'a(i) = INT(a + (b - a) * RND): PRINT a(i);
'NEXT i
'FOR i = 1 TO 30
'IF a(i) > max THEN max = a(i)
'NEXT i
'PRINT "1-й самый дорогой товар равен "; max
'FOR i = 1 TO 30: IF a(i) = max THEN a(i) = 0
'NEXT i
'max = 0
'FOR i = 1 TO 30
'IF a(i) > max THEN max = a(i)
'NEXT i
'PRINT "2-й самый дорогой товар равен "; max
'*Дан одномерный массив, содержащий положительные и отрицательные эл-ты.
'* Найти наименьший из положительных элементов
'SCREEN 9: COLOR 14, 1: CLS
'RANDOMIZE TIMER
'INPUT "Сколько элементов в Вашем массиве"; n
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


