Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

2) по формуле p = 3 + 4 * .

В этом случае общий член ряда в скобках можно выразить так:

3) по формуле p =

А общий член ряда в скобках в этом случае можно выразить так:

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

______________Программа 9.1____________________

CLS : SCREEN 9: COLOR 14, 1

REM *******Вычисление числа p*******

n = 0: s# = 0: e# = .0001: a# = 0

'10 n = n + 1

'a# = 1 / (2 * n - 1)

's# = s# + a# * (-1) ^ (n - 1)

'IF a# > e# THEN 10

's# = s# * 4

'PRINT TAB(10); "Знаете, что p = "; s#

'PRINT TAB(10); "Использовали в цикле слагаемых "; n

'LOCATE 5, 20: INPUT "Сколько слагаемых просуммировать"; i

'LOCATE 6, 20:?"Если слишком много - придется ЖДАТЬ"

'DO WHILE n < i

'n = n + 1

's# = s# + (1 / (2 * n - 1)) * (-1) ^ (n - 1)

'LOOP

'PRINT TAB(19); "Помните"; s# * 4

'LOCATE 5, 20: INPUT "Сколько слагаемых просуммировать"; i

'DO WHILE n < i

'n = n + 1

's# = s# + (1 / (2 * n * (2 * n + 1) * (2 * n + 2))) * (-1) ^ (n - 1)

'LOOP

'PRINT TAB(19); "Помните"; s# * 4 + 3

'LOCATE 10, 20: INPUT "С какой точность считать"; e#

'LOCATE 11, 20: PRINT "Если точность слишком мала - придется ЖДАТЬ"

НЕ нашли? Не то? Что вы ищете?

'DO

'n = n + 1

'a# = 1 / n ^ 2

's# = s# + a#

'LOOP UNTIL a# < e#

'PRINT TAB(19); "Известно, что p = "; SQR(6 * s#)

Иногда бывает удобно использовать конструкции с IF…THEN и DO…LOOP.

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

______________Программа 9.2____________________

i = 0: k = 0

DO WHILE i < 1000

i = i + 1

IF i / 19 = i \ 19 THEN k = k + 1

LOOP

PRINT TAB(2); "Чисел, делящихся на 19, меньших 1000 ровно "; k

3.Найдите площадь фигуры, заключенной между полуволной синусоиды и осью оу, используя метод Монте - Карло.

…………………Программа 9.3…………………………………….

pi = 4 * ATN(1)

k = 0: n = 0

10 x = pi * RND: y = RND: n = n + 1

IF y <= SIN(x) THEN k = k + 1

IF n / 2000 = n \ 2000 THEN PRINT pi * k / n

GOTO 10

3.1Эту задачу можно обобщить. Задана функция y = f(x) и отрезок [a;b], на котором эта функция положительна, найти методом Монте – Карло интеграл от этой функции.

4.Найти предел функции y = f(x) на бесконечности. В качестве контрольного примера рассмотреть второй замечательный предел.

…………………Программа 9.4…………………………………….

def fna(x) = (1 + 1/x)x

x0 = 10

10 x = x0 + 10

y0 = fna(x0): y = fna(x)

if abs(y – y0)>1e-4 then x0 = x: goto 10

?”Записывайте значение предела”; y

Предлагаю сильным студентам усовершенствовать эту программу: 1)Организовать диалог «Ввели ли Вы функцию?” и т. д. 2)Программа вычисляет предел на плюс бесконечности, однако, некоторые функции имею другой предел на минус бесконечности. 3)Программа дважды вычисляет y(x), рационально ли это? Переопределять не только х0, но и y0. 4)А если предела не существует, то составить конструкцию, например такую, если ‌у‌>105 то «предела, по-видимому, не существует» и т. д.

5.Классическая задача табулирования функции. Конечно, проще и нагляднее ее выполнить с помощью FOR…NEXT, однако, необходимо научиться организовывать цикл и с помощью IF..THEN и DO…LOOP. На отрезке [a;b] задана функция y = f(x). Разбив отрезок на n частей напечатать таблицу значений x и y.

…………………Программа 9.5…………………………………….

DEF FNA (x) = x ^ 2 - 4

LOCATE 1, 2

INPUT "Введите начальное и конечное значения аргумента"; a, b

INPUT "Введите число строк таблицы"; n

h = (b - a) / n

PRINT TAB(10); " x f(x)"

x = a - h

DO

x = x + h

PRINT TAB(20); x; TAB(50); FNA(x)

LOOP WHILE x < b

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

6.Рассмотрим еще задачу, в решении которой используем IF…THEN и DO…LOOP. В операторе DATA размещены 10 вещественных чисел, среди которых есть целые. Вывести их на печать, найти их количество и их сумму.

…………………Программа 9.6…………………………………….

DATA -3.56,10.5,-10,5.61,20.543,30,5.23,4,20.98,20

n = 0: k = n: s = n

LOCATE 10, 5

PRINT "Целые числа:";

DO

n = n + 1

READ x

IF x = INT(x) THEN

k = k + 1: s = s + x

PRINT x;

END IF

LOOP WHILE n < 10

PRINT TAB(10); "Количество чисел"; k, "их сумма"; s

7. Пусть задана функция, принимающая на [a; b] значения разных знаков, т. е. она на этом отрезке имеет действительный корень. Уточнить его методом Монте-Карло.

…………………Программа 9.7…………………………………….

8.Пусть задана функция y = f(x), о которой известно, что справа от значения x0 она имеет действительный корень. Найти достаточно малый интервал, содержащий этот корень. Это классическая задача вычислительной математики: ОТДЕЛЕНИЕ действительного корня уравнения.

…………………Программа 9.7…………………………………….

INPUT”Введите длину интервала”; h

DEF FNA (x) = x ^ 2 - 4

INPUT "Справа от "; x

10 x1 = x + h

y = FNA(x): y1 = FNA(x1)

IF y * y1 > 0 THEN x = x + h: GOTO 10

PRINT "x="; x + h / 2

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

Эта программа отыскивает отрезок, заданной Вами длины, который содержит один действительный корень. Эта операция в вычислительной математике называется ОТДЕЛЕНИЕМ корня. Поставим задачу уточнить корень с заданной точностью.

8.Задана функция, которая на отрезке [a; b] меняет знак, т. е. содержит действительный корень. Уточнить его с заданной точностью. Методов уточнения много. Мы выберем метод Монте-Карло.

…………………Программа 9.8…………………………………….

SCREEN 9: COLOR 14, 1

RANDOMIZE TIMER: CLS

DEFDBL X

DEF fna (x) = SIN(x)

1 LOCATE 5, 10

INPUT "Введите отрезок уточнения корня функции"; a, b

IF SGN(fna(a)) = SGN(fna(b)) THEN

PRINT TAB(5); "Отрезок не содержит корней функции": GOTO 1

END IF

LOCATE 6, 5: INPUT "Точность окончательного результата"; e

DO

x = a + (b - a) * RND: y = fna(x)

LOOP WHILE ABS(y) > e

z = INT(x / e + .5) * e

PRINT TAB(10); "Записывайте корень функции"; z

Попытайтесь модернизировать программу с целью ускорения ее работы. Принцип: вычисляйте два значения функции и если они имеют разные знаки – переопределяйте a и b.

В заключение два варианта решения интереснейшей занимательной задачи: найти количество и сумму цифр натурального числа.

…………………Программа 9.9……………………………………

С конструкцией DO…LOOP

s = 0: k = 0

LOCATE 2, 20: INPUT "Введите натуральное число"; n: m = n

DO WHILE n > 0

k = k + 1

p = n - (n \ 10) * 10

s = s + p

PRINT TAB(20); p;

n = n \ 10

LOOP

PRINT

PRINT TAB(10); "Количество цифр равно "; k

PRINT TAB(10); "Сумма цифр равна "; s

С конструкцией IF…THEN

10 IF n / 10 > 0 THEN

k = k + 1

p = n - (n \ 10) * 10

s = s + p

PRINT TAB(20); p;

n = n \ 10

GOTO 10

END IF

PRINT TAB(10); "Количество цифр равно "; k

PRINT TAB(10); "Сумма цифр равна "; s

Задачи для домашнего решения

1.С точностью до 10-4 найти сумму, самостоятельно сформулировав условие организации цикла:

S =

2. Вычислить сумму, которая будет на сберегательной книжке через t лет, если на начальный период положить на книжку a рублей, а годовой прирост равен 7%.

3.Задана рекуррентная формула: xi+1 = . Найти x100, если известно, что х0 = 3,4

4.Выясните, в какой координатной четверти расположен треугольник, образованный прямой y = ax + b и осями координат.

5.Решите систему двух линейных уравнений по формулам Крамера, выдавая сообщения: система имеет единственное решение х = .., у = .., система не имеет решения, система имеет множество решений.

6.Задана функция y = f(x) и отрезок [a;b], на концах которого функция принимает значения разных знаков. Проверьте, так ли это, если нет – предложите пользователю ввести новый отрезок, если да, то уточните корень уравнения f(x) = 0 с точность ε методом половинного деления.

7.Почти все студенты НХК приезжают в колледж на автобусах, получив билет исследуют его шестизначный номер. Если сумма первых трех цифр равна сумме трех последних цифр, то билетик счастливый, если эти суммы равны 13, то билетик очень счастливый. Переработайте программу 9.9, и пусть Ваша программа ответит, какой у Вас билетик.

Что нового Вы узнали, какие умения и навыки приобрели на занятии №9?

·  познакомились с организацией циклических структур с помощью оператора IF…THEN;

·  познакомились с организацией циклических структур с помощью оператора DO…LOOP;

·  научились формулировать условия работы цикла, как ДО него, так и ПОСЛЕ;

·  восхитились методом Монте-Карло;

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

Занятие 10. Организация циклов

с использованием FORNEXT.

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

Наиболее проще организовывать циклы, используя операторы FOR (для) и NEXT (следующий). Оператор FOR открывает цикл, оператор NEXT закрывает его. Все команды, расположенные между этими операторами, будем называть телом цикла. FOR и NEXT – «неразлучны», иначе ошибка. Внимательно отслеживайте, по какой переменной цикл открывается, по какой закрывается. STEP (шаг): по умолчанию 1, если первое значение параметра цикла меньше последнего, то STEP должен быть отрицательным.

1.Вернемся к задаче табулирования функции. Задана функция y = f(x) на отрезке [a;b]. Разбив отрезок на n частей напечатать таблицу ее значений.

…………………Программа 10.1…………………………………….

def fna(x) = x^3 + 2*x^2 – 3*x -12

input”Введите отрезок a, b”;a, b

input”Сколько строк в таблице”;n

h = (b – a)/n

?” x y”

for x = a to b step h

?x, fna(x)

next x

2.Вернемся также к популярной задаче суммирования. Пусть необходимо найти сумму 20 членов числовой последовательности с общим членом an = .

…………………Программа 10.2…………………………………….

s = 0

for i = 1 to 20: s = s + i^2/(exp(i) + i): next

?”Запишите сумму:”;s

3.На отрезке [a;b] задана функция y = f(x). Найти ее наибольшее и наименьшее значения на этом отрезке.

…………………Программа 10.3…………………………………….

DEF fna (x) = x ^ 3 / 3 + x ^ 2 - 5 * x + 3

INPUT "Введите отрезок a, b"; a, b

ma = fna(a): mi = fna(a)

FOR x = a TO b STEP.001

y = fna(x)

IF ma < y THEN ma = y: xma = x

IF mi > y THEN mi = y: xmi = x

NEXT x

PRINT "Наибольшее значение f("; xma; ") = "; ma

PRINT "Наименьшее значение f("; xmi; ") = "; mi

4.В операторе DATA помещены 10 чисел. Вывести на печать наибольшее из них.

…………………Программа 10.4…………………………………….

DATA 1,3,5,7,4,-3,4,11,8,2

READ m

FOR i = 1 TO 9: READ a

IF m < a THEN m = a

NEXT

PRINT "максимальное число "; m

5.Найти все делители натурального числа, меньшие самого числа.

…………………Программа 10.5…………………………………….

INPUT "Введите число", x

FOR i = 1 TO x/2

IF x MOD i = 0 THEN PRINT "Множитель "; i

NEXT i

Усложните задачу: в случае, если кроме 1 множителей нет – выдавать сообщение: число простое.

Задачи более интересные в плане подготовки к олимпиаде по программированию

5.1Найти все простые числа меньшие заданного числа.

5.2Есть ли в пределах первых ста натуральных чисел числа, сумма делителей которых, включая единицу, но исключая само число, равна этому числу?

5.3 В пределах от 1 до 1000 напечатать все пары простых чисел отличающихся на два.

6.Важная и нужная задача численного интегрирования.

На отрезке [a, b] задана функция y = f(x). Разбить данный отрезок на n частей, определить h = , определить x0 = a, x1 = a + h, x2 = a + 2h, и т. д., и вычисляя yi = f(xi), определить суммы S = h(y0 + y1 + …+ yn-1), S = h(y1 + y2 + …+ yn); - это формулы прямоугольников

S = h(); - формула трапеций S = - и самая популярная формула парабол (Симпсона), n – обязательно четное число.

…………………Программа 10.6…………………………………….

DEF fna (x) = x ^ 3 / 3 + x ^ 2 - 5 * x + 3

INPUT "Введите пределы интегрирования a, b"; a, b

n = 4

10 n = n * 2: s = 0

h = (b - a) / n

s = fna(a) + fna(b)

FOR i = 1 TO n - 1 STEP 2: x = a + h * i

s = s + 4 * fna(x): NEXT i

FOR i = 2 TO n - 2 STEP 2: x = a + h * i

s = s + 2 * fna(x): NEXT i

PRINT "При n = "; n; "I = "; s * h / 3

GOTO 10

Суммирование нечетных и четных у мы провели в двух различных циклах. Но можно поступить и так:

FOR i = 1 TO n - 1: x = a + h * i

IF i / 2 = i \ 2 THEN s = s + 2 * fna(x) ELSE s = s + 4 * fna(x)

NEXT i

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

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

1.Составить таблицу перевода: долларов в рубли, рублей в доллары.

2.Составить таблицу стоимости порций сыра массой 50, 100, 150, …, 1000 г., если известна цена одного килограмма.

3.Даны действительное число а, натуральное число n. Вычислить

a(a - n)(a - 2n)…(a - n2).

4. Даны натуральное n, действительное x. Вычислить: sin x +sin2 x + sin3x + … + sinnx.

5.Даны натуральное n, действительное x. Вычислить сумму n членов степенного ряда, если an = .

6.Дано a и n. Вычислить значение произведения a(a - n)(a - 2n)…(a - n2).

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

8.Вывести на экран n членов последовательности Фибоначчи, используя рекуррентную формулу : an = an-1 + an-2. Если a1 = 1 и a2 = 1

9.Составить калибровочную таблицу определения объема жидкости в резервуаре, имеющем форму прямоугольного параллелепипеда, внутренние размеры которого a, b,c. Задайте шаг калибровочной таблицы h. Объем выражать в литрах.

Что нового Вы узнали, какие умения и навыки приобрели на занятии №10?

·  познакомились с организацией циклических структур с помощью оператора FOR…NEXT;

·  усвоили, как какими переменными должны открываться и закрываться циклы;

·  научились формулировать условия работы цикла с указанием шага;

·  уверенно освоили организацию циклов по нахождению сумм;

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

Занятие 11. Вложенные циклы. Составление и отладка

более сложных циклических программ

Настоящее занятие - продолжение предыдущего: углубление, закрепление и контроль умений. На занятии студенты лишь познакомятся с понятием вложенных циклов, а их широкое применение будет осуществляться в теме «Массивы». Наряду с коллективным составлением программ, Вам предстоит самостоятельно разрабатывать программы с целью индивидуализации процесса обучения. Вам будут предлагаться задачи разной сложности, выбирайте, которые адекватны Вашим знаниям и способностям.

1.Рассмотрим популярную задачу – нахождение целочисленных решений уравнения ax + by + с = 0, т. н. Диафантово уравнение. Это наиболее простой, но яркий пример организации вложенных циклов.

…………………Программа 11.1…………………………………….

INPUT”Введите коэффициенты уравнения a, b,c”;a, b,c

INPUT”Введите отрезок для х: x1,x2”;x1,x2

INPUT”Введите отрезок для y: y1,y2”;y1,y2

FOR x = x1 TO x2

FOR y = y1 TO y2

IF a * x + b * y + c = 0 THEN PRINT x, y

NEXT y, x:’Обратите внимание на порядок закрытия вложенных циклов

2.Одной из популярных задач целочисленной арифметики является задача суммирования цифр натурального числа. На предыдущем занятии мы рассматривали несколько вариантов решения такой задачи. Продолжим повышать свои умения в организации циклических программ на других вариантах. Вот один из многих вариантов такой программы. Здесь два цикла: первый организован по условию и подсчитывает количество цифр числа, второй – по параметру i, выделяет эти цифры и суммирует их. К этой задаче еще вернемся при изучении символьных переменных

…………………Программа 11.2…………………………………….

INPUT "Введите число ", x

PRINT "Цифры заданного числа:"

k = 0

10 k = k + 1

m = INT(x / 10 ^ k): IF m > 0 THEN 10

‘***Вначале пересчитали цифры и сохранили в переменной k

FOR i = 1 TO k: a = x MOD 10: s = s + a: x = INT(x - a) / 10: PRINT a; : NEXT: PRINT

'****Затем их просуммировали

PRINT "Количество цифр "; k

PRINT "Сумма цифр "; s

Еще варианты решения задачи.

С использованием блока DO…LOOP:

s = 0: k = 0

LOCATE 2, 20: INPUT "Введите натуральное число"; n

DO WHILE n > 0

k = k + 1

p = n - (n \ 10) * 10

s = s + p

PRINT TAB(20); p;

n = n \ 10

LOOP

PRINT

PRINT TAB(10); "Количество цифр равно "; k

PRINT TAB(10); "Сумма цифр равна "; s

И с использованием блока IF…THEN

10 IF n / 10 > 0 THEN

k = k + 1

p = n - (n \ 10) * 10

s = s + p

PRINT TAB(20); p;

n = n \ 10

GOTO 10

END IF

PRINT TAB(10); "Количество цифр равно "; k

PRINT TAB(10); "Сумма цифр равна "; s

Математика позволяет подсчитать количество цифр натурального числа непосредственно, одной формулой. Для тех, кто изучал логарифмы, нет большого труда увидеть, что k = INT(log(x)/log(10)) + 1 и есть количество цифр числа х.

Занимательное продолжение этой программы. Дан автобусный билетик – шестизначное натуральное число, все знают, какие билетики считаются «счастливыми»: сумма первых трех цифр равна сумме последних трех цифр, а если эти суммы равны 13, то билетик «очень счастливый». Пусть Ваша программа на введенное шестизначное число выдаст одно из сообщений: билет очень счастливый, билет счастливый, билет несчастливый.

3.Очень любят студенты программировать «бегущую строку». Вот один из многих вариантов.

…………………Программа 11.3…………………………………….

'**Бегущая строка*****

a$ = "НХК"

10 CLS

FOR i = 1 TO 80

LOCATE 10, i: COLOR 14, 1: PRINT a$

FOR j = 1 TO 10000: NEXT j

LOCATE 10, i: COLOR 1, 1: PRINT a$

NEXT

GOTO 10

На примере этой простой программы вводим понятие «пустого цикла».

Вы понимаете, что задерживать выполнение программы с помощью пустого цикла – это не самое простейшее решение, в QB существует специальный оператор, задерживающий выполнение программы: SLEEP [секунды], предлагаю освоить его самостоятельно.

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

4.Мы уже находили наибольшее и наименьшее значения функции одной переменной на отрезке. Поставим задачу отыскать наибольшее и наименьшее значения функции ДВУХ переменных z = f(x;y) на прямоугольнике [x1;x2]; [y1;y2]. Программа может быть такой.

…………………Программа 11.4…………………………………….

SCREEN 9: COLOR 4, 2

DEF fna (x, y) = x ^ 2 + y ^ 2

PRINT TAB(10); : INPUT "Введите отрезок изменения х"; x1, x2

PRINT TAB(10); : INPUT "Введите отрезок изменения у"; y1, y2

max = fna(x1, y1): xmax = x1: ymax = y1

min = fna(x1, y1): xmin = x1: ymin = y1

PRINT TAB(10); : INPUT "Введите шаг поиска по х"; hx

PRINT TAB(10); : INPUT "Введите шаг поиска по y"; hy

FOR x = x1 TO x2 STEP hx

FOR y = y1 TO y2 STEP hy

IF fna(x, y) > max THEN max = fna(x, y): xmax = x: ymax = y

IF fna(x, y) < min THEN min = fna(x, y): xmin = x: ymin = y

NEXT y, x

PRINT TAB(10); : PRINT "Максимальное значение f("; xmax; ";"; ymax; ") = "; max

PRINT TAB(10); : PRINT "Минимальное значение f("; xmin; ";"; ymin; ") = "; min

5.Рассмотрим популярную задачу на вложенные циклы. Найти пары чисел, являющихся координатами точек, которые лежат на окружности x2 + y2 = 169

…………………Программа 11.4…………………………………….

PRINT TAB(9); : INPUT "Интервал по х"; x1, x2

PRINT TAB(9); : INPUT "Интервал по у"; y1, y2

FOR x = x1 TO x2: FOR y = y1 TO y2

IF x ^ 2 + y ^ 2 = 169 THEN PRINT TAB(10); x, y

NEXT y, x

5.Обобщим эту интересную задачу. Пусть дано уравнение с двумя переменными f(x;y) = 0. Найти его целочисленные решения или выдать сообщение, что таковых на указанных пользователем промежутках нет.

…………………Программа 11.5…………………………………….

DEF fna (x, y) = x ^ 2 + x * y + 5 * x + 7 * y – 30:’левая часть уравнения

K=0:’***обнуляем признак

PRINT TAB(15); : INPUT "Введите x1,x2"; x1, x2

PRINT TAB(15); : INPUT "Введите y1,y2"; y1, y2

FOR x = x1 TO x2

FOR y = y1 TO y2

IF fna(x, y) = 0 THEN PRINT TAB(15); x, y: k = k+1

NEXT y

NEXT x

IF k>0 THEN?”На указанном прямоугольнике решений нет”

6. Стенные часы отбивают удар каждые полчаса и количество часов от 1 до 12. Составить программу подсчета количества ударов за сутки.

…………………Программа 11.6…………………………………….

s = 0

FOR i = 1 TO 12: s = s + i: NEXT i

PRINT "Ударов за сутки "; 2 * s + 24

7.Объем жидкости в резервуаре, имеющего форму шара вычисляется по формуле:

, где d – внутренний диаметр шара, h – высота налива жидкости. Напечатайте калибровочную таблицу, отражающую зависимость объема от высоты налива.

…………………Программа 11.6……………………………………

INPUT "Внутренний диаметр резервуара в метрах"; d: d = d * 100

INPUT "Шаг таблицы в сантиметрах"; hg

PRINT "Высота объем"

PRINT "налива в см жидкости в л."

FOR h = 0 TO d STEP hg

v = pi * h ^ 2 * (3 * d - 2 * h) / 6

PRINT INT(h), INT(v / 1000)

NEXT h

7.На отрезке [a;b] задана непрерывная функция y = f(x). «Проходя» этот отрезок с достаточно малым шагом h, найдите приближенно длину дуги кривой y = f(x).

…………………Программа 11.7……………………………………

DEF fna (x) = SIN(x)

PRINT TAB(10); : INPUT "Введите отрезок a, b"; a, b

s = 0: h = .001

FOR x = a TO b - h STEP h

dy = fna(x + h) - fna(x)

m = SQR(h ^ 2 + dy ^ 2)

s = s + m

NEXT x

PRINT TAB(10); "Длина дуги равна"; s

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

1.Имитировать 10-кратное бросание двух игральных костей. Какую сумму Вы набрали?

2.Монету подбросили 100 раз. Подсчитайте количество выпавших «орлов».

3.Проверьте функцию RND «на случайность». Сгенерируйте 100 чисел из интервала (-1; 1) и подсчитайте количество положительных и отрицательных. Их оказалось поровну?

4.Найти суммы по заданному n.

5.Как Вы знаете из курса физики, энергия движущего тела вычисляется по формуле:. Вычислить суммарную энергию тела, если скорость v изменяется от v1 до v2 с шагом hv, а масса m изменяется от m1 до m2 с шагом hm.

Какие умения и навыки Вы приобрели на занятии №11?

·  Углубили понимание организации циклов с помощью оператора FOR…NEXT;

·  рассмотрели конкретные интересные задачи и их программную реализацию;

·  закрепили использование понятия «признак»;

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

Занятие 12. Организация подпрограмм в QB.

Цель занятия – ознакомить Вас на примерах с важнейшим понятием программирования - ПОДПРОГРАММА.

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

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

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

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

CLS : SCREEN 9: COLOR 14, 1

pi = 4 * ATN(1)

________________Листинг электронной лекции для преподавателя_________

'* Уважаемые студенты! Познакомьтесь с очень важным вопросом в программировании

'* Организация и использование ПОДПРОГРАММ

'* Поступите так: что-нибудь измените в этом файле, например, вместо

'* этих строк поместите свое имя и сохраните файл под другим именем

'* с тем, чтобы Вы работали в СВОЕМ файле. Проделайте это, пожалуйста.

'Уважайте студентов других подгрупп.

'* Подпрограмма - это группа операторов или часть программы, описывающая

'* некоторый алгоритм, который можно многократно использовать, обращаясь

'* к нему из различных точек программы. Использование подпрограмм уменьшает

'* общее количество операторов в программе, чем обеспечивает

'* более эффективное использование памяти.

'* В языке Бейсик подпрограмма оформляется как группа операторов,

'* которая должна выполняться при обращении к ней.

'* Обращение к подпрограмме осуществляется оператором GOSUB n, где

'* n - номер строки, с которой начинается подпрограмма.

'* Подпрограмма может содержать обращения к другим

'* подпрограммам. При этом внутренняя подпрограмма считается вложенной.

'* После завершения выполнения подпрограммы управление должно быть возвращено

'* в ту точку программы, из которой сделан переход в подпрограмму. Выход из

'* подпрограммы осуществляется с помощью оператора RETURN, который

'* автоматически возвращает управление строке, следующей за строкой, где

'* расположен оператор GOSUB. Все подпрограммы должны завершаться RETURN.

'* При многократном обращении к подпрограмме

'* один оператор RETURN может обслуживать несколько операторов GOSUB.

'* Два предупреждения. Первое.

'* Необходимо внимательно отслеживать имена переменных, используемых в

'* подпрограмме и в основном теле программы. Например, в основной программе

'* Вы организуете цикл по i и в подпрограмме у Вас тоже цикл по i.

'* Программа работать не будет!!! Будьте внимательны.

'* И второе. Внимательно следите за тем, с КАКОЙ (какими) переменной Вы

'*" идете" в подпрограмму и, особенно, с КАКОЙ (какими) "возвращаетесь".

'* Ведь до последующего обращения к подпрограмме значение переменной, полу-

'* ченное в подпрограмме должно быть "использовано", иначе оно будет утеряно.

'*И еще проблема при использовании подпрограмм. Как правило, подпрограммы

'* располагают в конце программы, а значит основное тело программы

'* должно завершаться либо каким либо переходом, либо END, иначе получите

'*" Ошибка: RETURN без GOSUB", понятно почему.

'***

'* Первый пример приведем с подробными комментариями.

'* Важное значение во многих разделах математики играет понятие "число

'* сочетаний из n по k". (обязательно n>=k) В дальнейшем Вы будете его изучать.

'* Вычисляется оно по формуле С = n!/(k!*(n-k)!). 3 раза необходимо вычислять

'* факториалы. Их вычисление организуем в подпрограмме.

'* Снимите REM, где необходимо и запустите программу, предварительно

'* изучив и законспектировав ее

'5 INPUT "Введите n и k"; n, k: 'Запросили у пользователя исходные данные

'IF n < k THEN PRINT "Вы не правы, повторите ввод": GOTO 5: 'Защита от дураков"

'* Идем в подпрограмму за n! Но подпрограмма вычисляет факториал натурального

'*"х" и запоминает его значение в переменной "y". Значит необходимо:

'x = n: GOSUB 50: 'Пришли с y = n!, его необходимо запомнить!

'p = y

'*Теперь идем за k!? аналогично:

'x = k: GOSUB 50: 'Пришли с y = k!, запоминаем и его:

'q = y: 'И идем за (n-k)!

'x = n - k: GOSUB 50: 'Пришли с y = (n-k)! и вычисляем "С"

'c = p / q / y: 'Выводим ответ

'PRINT "Число сочетаний из"; n; "по"; k; "равно"; c

'END

'50 ' Подпрограмма вычисления факториала

'IF x = 0 THEN y = 1: GOTO 20

'y = 1: FOR i = 1 TO x: y = y * i: NEXT i

'20 RETURN

'* Окончание первой программы***

'* Восстановите REM в освоенной программе*******

'* Вы уже составляли программу табулирования функции: вывод ее n значений

'* на отрезке [a;b]. Функцию мы задавали оператором DEF FN

'*А если функция задана несколькими формулами при различных значениях

'* аргумента? Необходимо организовать подпрограмму.

'INPUT "Введите отрезок a, b"; a, b

'INPUT "Введите число строк таблицы значений n"; n

'h = (b - a) / n

'FOR x = a TO b STEP h

'GOSUB 100

'PRINT x, y

'NEXT x

'END

'100 '* Подпрограмма вычисления значений функции

'IF x <= -1 THEN y = - x

'IF x > -1 AND x <= 1 THEN y = x ^ 2

'IF x > 1 THEN y = x

'y = (INT(y * 1000 + .5)) / 1000

'x = (INT(x * 1000 + .5)) / 1000

'RETURN

'* Окончание программы табулирования функции

'* Вы уже составляли программу вычисления интеграла по формуле трапеций

'*на отрезке [a;b]: I = h*((f(a)+f(b))/2+f(a+h)+f(a+2h)+...+f(b-h))

'*где h = (b - a)/n

'* Функцию мы задавали оператором DEF FN

'*А если функция задана несколькими формулами при различных значениях

'* аргумента? Необходимо организовать подпрограмму.

'INPUT "Введите отрезок a, b"; a, b

'n = 4

'5 n = n * 2

'h = (b - a) / n

's = 0

'x = a: GOSUB 100: s = s + y

'x = b: GOSUB 100: s = s + y

's = s / 2

'FOR x = a + h TO b - h STEP h

'GOSUB 100

's = s + y

'NEXT x

's = s * h

'PRINT "При n="; n; "значение интеграла равно"; s

'GOTO 5

'100 '* Подпрограмма вычисления значений функции

'IF x <= -1 THEN y =sin(x)

'IF x > -1 AND x <= 1 THEN y = x ^ 2

'IF x > 1 THEN y = cos(x)

'RETURN

'* Окончание программы интегрирования функции

'* Составим программу с двумя подпрограммами

'* Студент ведет вычисления по формуле, аргументы a, b,c, d задает в градусах:

'* z = (COS(a) + SIN(b) + 3) / SQR(COS(c) + SIN(d) + 3)

'* Организуем подпрограмму перевода градусов в радианы и подпрограмму

'* вычисления выражения w = COS(p) + SIN(q) + 3

'10 INPUT "Введите значения углов a, b,c, d в градусах"; a, b, c, d

'g = a: GOSUB 30: p = r

'g = b: GOSUB 30: q = r

'GOSUB 40: ch = w

'g = c: GOSUB 30: p = r

'g = d: GOSUB 30: q = r

'GOSUB 40: zn = SQR(w)

'z = ch / zn

'PRINT "Записывайте ответ: z = "; z

'END

'30 'Подпрограмма перевода градусов в радианы: входим с g, выходим с r

'r = g * pi / 180: RETURN

'40 ' Подпрограмма вычисления выражения COS(p) + SIN(q) + 3

'w = COS(p) + SIN(q) + 3: RETURN

'* Окончание программы

'*******

'* Подпрограммы широко применяются в графике, мы будем изучать ее позже.

'* В качестве отдыха рассмотрите программу, ее не переписывайте в конспект.

'* Снимите REM в нашей последней на сегодня программе

'CLS : SCREEN 9:

'pi = 4 * ATN(1)

'COLOR 4, 0: PRINT "Большая Медведица и Кассиопея вращаются вокруг Полярной звезды

'COLOR 14, 0: WINDOW (-70, -70)-(70, 70)

'CIRCLE (0, 0), .3, 12

'k = 1.2

'FOR f = 0 TO 1000 STEP.003

't = f - .05: a = 30: GOSUB 100: t = f: a = 17: GOSUB 100

't = f - .4: a = 33: GOSUB 100: t = f - .65: a = 23: GOSUB 100

't = f - 1.2: a = 27: GOSUB 100: t = f - 1.4: a = 40: GOSUB 100

't = f - 1.4: a = 55: GOSUB 100: t = f + 3: a = 33: GOSUB 100

't = f + 2.8: a = 43: GOSUB 100: t = f + 2.5: a = 33: GOSUB 100

't = f + 2.2: a = 43: GOSUB 100: t = f + 2: a = 33: GOSUB 100

'FOR i = 1 TO 700: NEXT i

't = f - .05: a = 30: GOSUB 200: t = f: a = 17: GOSUB 200

't = f - .4: a = 33: GOSUB 200: t = f - .65: a = 23: GOSUB 200

't = f - 1.2: a = 27: GOSUB 200: t = f - 1.4: a = 40: GOSUB 200

't = f - 1.4: a = 55: GOSUB 200: t = f + 3: a = 33: GOSUB 200

't = f + 2.8: a = 43: GOSUB 200: t = f + 2.5: a = 33: GOSUB 200

't = f + 2.2: a = 43: GOSUB 200: t = f + 2: a = 33: GOSUB 200

'NEXT f

'100 'Подпрограмма рисования звезд

'x = a * COS(t): y = k * a * SIN(t): CIRCLE (x, y), .3: RETURN

'200 'Подпрограмма стирания звезд

'x = a * COS(t): y = k * a * SIN(t): CIRCLE (x, y), .3, 0: RETURN

'* Окончание программы

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

1.Вычислить значение выражения:

Организовать вычисление значений квадратных корней в подпрограмме.

,,,,,,,,,,,,,,,,,,,,,,,,,Программа 12.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7