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

If k then print "пароль принят" else print "ошибка пароля"

Пример 4. Текст (строковое выражение) содержит целое число, цифры которого перемешаны с другими символами. Найти квадрат

этого числа. Задача решается кодом:

DEFSTR S-T

DEFLNG I-N 'предопределение типов

Input "Введите произвольный текст : ", txt

m = 1: n = 0

FOR i = 1 to LEN(txt): s = MID$(txt, i, 1)

SELECT CASE s

CASE "0" TO "9": n = 10*n + VAL(s) ' формирование числа

CASE "-": IF (m > 0) AND (n = 0) THEN m = -1 'знак числа

END SELECT

NEXT

IF n = 0 THEN

PRINT "Чисел нет."

ELSE

PRINT "Число = "; m * n; " с квадратом = "; n * n

END IF

Если бы потребовалось из текстовой информации извлечь последова-тельность целых чисел, разделенных произвольными символами, и просуммировать эти числа, то код программы был бы несколько иной.

Приведем вариант кода, начинающегося с оператора цикла FOR:

FOR i = 1 TO LEN(txt): s = MID$(txt, i, 1)

SELECT CASE s

CASE "0" TO "9": n = 10 * n + VAL(s) ' формирование числа

CASE ELSE

IF n > 0 THEN

nsum = nsum + m * n: n = 0 "суммирование чисел

END IF

IF s = "-" THEN m = -1 ELSE m = 1 'определение знака числа

END SELECT

NEXT: nsum = nsum + m * n 'добавка последнего числа

PRINT "Результат = "; nsum

Пример 5. Вывести на экран заданный текст, слова которого раз-делены пробелами. При выводе каждое слово должно быть написано в

обратном порядке, но последовательность слов сохранена.

DEFINT I-N

DEFSTR S-T

txt = " … ": n = LEN(txt) : i = 1

DO: j = INSTR(I, txt, " ") : IF j = 0 THEN j = n + 1

FOR k = j TO i STEP -1 : PRINT MID$(txt, k, 1); : NEXT

PRINT " "; : i = j + 1

LOOP UNTIL j = n + 1

Если слова в тексте разделены не только пробелами, но и другими разделителями (например, знаками препинания, арифметическими знаками, скобкамим и т. д.), то полезно использовать альтернативу

SELECS CASE как, например, в коде

DEFSTR R-T

DEFINT J

txt = " … " : t = "" : res = ""

FOR j = 1 TO LEN(txt) : s = MID$(txt, j, 1)

SELECT CASE s

CASE " ", ".", ";", ",", "?", "!", "(", ")", "[", "]", "-", "+", "*", "/"

res = res + t + s : t = ""

CASE ELSE : t = s + t 'обратный порядок

END SELECT

NEXT : res = res + t : PRINT res

Например, если введен текст: [Ку –ку!]-Два + 0357 , то на экран будет выведено сообщение: [уК –ук!]-авД + 7530.

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

Пример 6. Вычислить приближенное значение cos(x) с помощью степенного ряда cos(x) = (-1)n с погрешностью не более  = 0.00001. Значение х вводится с клавиатуры. Здесь первые несколь-ко слагаемых ряда можно записать в виде: 1 - + - + … Очевид-но, n – e слагаемое отличается от (n - 1) –го множителем ,

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

DEFINT I : DEFSNG P - X

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