Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

Input X

s = 1 : p = - x * x : q = 1 : i = 0

DO : i = i + 2 : q = p * q ( i * ( i - 1)) : s = s + q

LOOP UNTIL ABS(q) < 0.00001

PRINT "x = " ; x ; "; s = " ; s ; "; точное значение = " ; cos(x)

Пример 7. Вычислить для заданного х сумму

f(x) =  . Здесь, как можно заметить, n – e

слагаемое отличается от предыдущего множителем , поэ-

тому решение задачи можно представить кодом:

DEFINT N

DEFSNG P-S

n = 1: r = 2 * x / (1 + x * x)

q = 0.5 * r: sum = q 'вычислено первое слагаемое

WHILE ABS(q) > 0.000001

n = n + 2: q = q * r * n / (n + 1) : sum = sum + q

WEND : PRINT sum

Пример 8. Вычислить произведение (с точностью  = 0.000001)

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

заданной погрешности  (= 0.000001).

DEFSNG P-S

prod = SQR(2) : s = prod : q = 0

WHILE ABS(q – 1) > 0.000001

s = SQR(2 + s) : q = 2 / s 'вычисление сомножителя

prod = prod * q

WEND : PRINT prod

Заметим, что привлечение собственного интеллекта может вооб-ще избавить от программирования. Например, в задаче: составить про-грамму определения n – го элемента в последовательности чисел

110100100010000100000100 … легко понять, что k -я единица нахо-дится на 1 + - м месте (k = 1, 2, …). Поэтому, если число

целое, то на указанном месте стоит единица, иначе – ноль.

1.8. Программные стэки

В программе можно организовать неизменяемый стэк данных с помощью оператора DATA, после которого может быть записана последовательность констант произвольного типа, разделенных запя-тыми. Оператор DATA может располагаться в любом месте програм-мы (в начале строки). Совокупность всех операторов DATA образует единый стэк констант, которые могут быть прочитаны с помощью опе-ратора READ по очереди, начиная с первого элемента стэка. Каждое прочтение READ передает очередь следующему элементу стэка. Ко-гда список стэка исчерпан, обращение READ вызовет ошибку. Опера-тор RESTORE возвращает очередь считывания к первому элементу списка. Если строка с оператором DATA помечена, то RESTORE c этой меткой передает очередь считывания помеченному оператору.

Пример 1. Из списка 10 претендентов на участие в спецзадании

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

программой

DATA Николаев, Спинстер, Трафф, Васин, Лимонов, Локк,

Зенд, Жаров, Кислицын, Корд

DEFINT A-C, I 'при определении переменные принимают значение 0

DEFSTR S

RANDOMIZE TIMER

WHILE (a - b) * (a - c) * (b - c) = 0

a = 1 + INT(10 * RND) : b = 1 + INT(10 * RND)

c = 1 + INT(10 * RND)

WEND : 'выбор различных сл. целых чисел из [1, 10]

FOR i = 1 TO 10 : READ s

SELECT CASE i

'сравнение номера считанного имени со случайным числом

CASE a : str1 = s

CASE b : str2 = s

CASE c : str3 = s

END SELECT

NEXT

PRINT "Выбраны : " ; str1 ; ";" ; str2 ; ";" ; str3

Выбор данных из стэка всегда выполняется в одном и том же по-рядке: от первого элемента к последнему. При необходимости иного порядка прочтения следует вставлять цикл для прямого прочтения.

Пример 2. Если список предыдущего примера следует прочесть

в обратном порядке, то следует поступить так:

FOR i = 10 TO 1 STEP -1: RESTORE 'выбор обратного порядка

FOR j = 1 TO i : READ s: NEXT 'чтение в прямом порядке

PRINT s;

NEXT

Пример 3. Рассмотрим задачу перевода десятичного числа в чис-ло с произвольным основанием Q(1, 37). Алгоритм в своей основе прост: из числа все время вычитаем максимальную степень основания, уменьшая эту степень каждый раз на единицу до указанных пределов.

Недостающие цифры, как всегда, дополняются буквами латинского

алфавита. Алгоритм можно реализовать в виде кода:

DEFINT I-N: DEFDBL P-Z: DEFSTR A-T

CONST eps = 1E-12 'константа eps = 0.000000000001

DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z

INPUT "Введите число в десятичной системе счисления: N= ", x

INPUT "и новое основание (1<Q<37): Q= ", q

m = INT(LOG(x) / LOG(q) + eps) : r = q ^ m: p = x

IF m < 0 THEN t = "0." + STRING$(-m – 1, "0") ELSE t = ""

WHILE (m >= -16) AND (r > eps): j = INT(x / r) : x = x - j * r

RESTORE: FOR i = 0 TO j: READ a: NEXT 'чтение из стека DATA

m = m – 1: r = r / q: t = t + a: IF m = -1 THEN t = t + "."

WEND

PRINT "Результат перевода:": PRINT p;"(10) ---> "; t + "(";q;")"

Введя десятичное число 21 и новое основание 13.7, получим на экра-не результат: 21 (10)  17.416CD1BB33 (13.7).

Если основание системы счисления меньше единицы, код прог-раммы следует существенно переделать. Как?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]