
- •Выполнил: преподаватель Агафонов а. В.
- •Оглавление
- •19. Задания 55
- •22. Задания 59
- •1. Введение
- •2. Переменные
- •Символьные переменные.
- •Числовые переменные
- •3. Операторы присвоения, печати, ввода и ремарки Оператор присвоения
- •Оператор печати
- •Оператор ввода
- •Оператор ремарки
- •4. Арифметические действия.
- •Логический оператор and
- •Верное Верное Верное
- •Логический оператор or
- •Логический оператор not
- •Другие логические операторы xor, eqv, imp
- •7. Оператор условного перехода
- •Оператор if.(условие)..Then.(оператор)..Else..(оператор).
- •Оператор select
- •8. Задания
- •9. Оператор цикла Принудительное прерывание программы
- •Цикл do……loop
- •Цикл for...Next
- •Оператор goto
- •10. Задания
- •Задачи на вычисление сумм.
- •11. Функции
- •Математические функции
- •Символьные функции.
- •Вспомогательные функции
- •Выработка случайных величин.
- •12. Задания
- •13. Операторы графики.
- •Изображение линий и прямоугольников
- •Изображение кругов и эллипсов
- •Раскрашивание
- •Оператор draw
- •14. Задания
- •15. Функция пользователя
- •16. Процедуры
- •Оператор gosub..Return
- •Оператор sub...End sub
- •17. Задания
- •18. Массивы
- •Многомерные массивы
- •Операторы data, read, restore
- •19. Задания
- •20. Работа с файлами.
- •Запись в файл
- •Функция eof принимает значение 1, если конец файла и 0 – в противном случае. Аргументом функции является порядковый номер файла.
- •22. Задания
- •23. Создание функции пользователя в Excel с помощью Visual Basic
16. Процедуры
Процедурой называется независимый от основной программы кусок программы. Её можно использовать в разных местах основной программы.
Процедуры и функции пользователя называют подпрограммами.
Говорят, что процедуры расширяют множество стандартных операторов, а функции пользователя – множество стандартных функций.
Процедуру можно определить как часть программы и в виде отдельного модуля программы.
Оператор gosub..Return
Основную программу можно направить на выполнение подпрограммы с помощью операторов GOSUB и ON...GOSUB .Подпрограмма возвращается в основную программу с помощью оператора RETURN, который возвращает программу туда, откуда она ушла по оператору GOSUB.
Пример:
SCREEN 12 algus: PRINT "1. Рисуем круг" PRINT "2. Рисуем прямоугольник" PRINT "3. Рисуем круг и прямоугольник" PRINT "4. Выйди из программы" INPUT I CLS IF I = 1 THEN GOSUB ring 'запускаем процедуру круг IF I = 2 THEN GOSUB kast 'запускаем процедуру прямоугольник IF I = 3 THEN GOSUB molemad 'запускаем процедуру круг и прямоугольник IF I = 4 THEN END 'программа закончена GOTO algus ring: CIRCLE (320, 200), 100 RETURN 'возврат в основную программу kast: LINE (200, 200)-(300, 250), , B RETURN ' возврат в основную программу molemad: GOSUB ring ''запускаем процедуру круг GOSUB kast ''запускаем процедуру прямоугольник RETURN ''' возврат в основную программу |
Заметим, что оператор GOSUB не может быть без RETURN. Иначе будет ошибка. Отметим также, что одна процедура может вызывать другую. Например в процедуре- molemad).
Используем в последней программе оператор ON...GOSUB:
SCREEN 12 algus: PRINT "1. Рисуем круг" PRINT "2. Рисуем прямоугольник" PRINT "3. Рисуем круг и прямоугольник" PRINT "4. Выход из программы" INPUT I CLS 'процедура выбирается в зависимости от значения I ON I GOSUB ring, kast, molemad, lopp GOTO algus ring: CIRCLE (320, 200), 100 RETURN 'возврат в основную программу kast: LINE (200, 200)-(300, 250), , B RETURN ''возврат в основную программу molemad: GOSUB ring GOSUB kast RETURN ''возврат в основную программу lopp: END RETURN |
Значения переменной I могут быть 1, 2, 3 или 4.
Оператор sub...End sub
Удобнее создавать процедуру в виде отдельного модуля. В этом случае надо:
Взять из меню EDIT команду New Sub...
Напечатать имя процедуры (без пробелов и других особых символов, используя только английские буквы и цифры)
Между SUB и END SUB пишем операторы процедуры.
Для возврата в основную программу выбираем из меню View команду Subs... и выбираем имя своей программы.
Общий вид процедуры:
SUB имя [(параметры)] [STATIC] [операторы] END SUB |
То есть такой же, как и у функции пользователя.
Приведём пример процедуры BANG, которая очищает экран и печатает зелёным цветом в центр экрана слово "BANG" и ждёт нажатия клавиши:
SUB bang CLS LOCATE 12, 40 'помещаем курсор в центр экрана COLOR 2 'выбираем зелёный цвет PRINT "BANG" 'пишем слово bang COLOR 7 'выбираем снова серый цвет 'ждём нажатия клавиши... DO LOOP UNTIL INKEY$ <> "" 'очищаем экран... CLS END SUB |
Эту программу можно использовать следующим образом:
PRINT " Hello World!" SLEEP 2 'спим 2 секунды 'вызываем подпрограмму оператором CALL CALL bang PRINT "Tere Maailm!" SLEEP 2 'спим ещё 2 сек CALL bang |
Изменим предыдущую процедуру, сделав её зависимой от параметра:
SUB bang(tekst$) CLS 'очищаем экран LOCATE 12, 40 COLOR 2 PRINT tekst$ 'печатаем значение переменной tekst$ COLOR 7 DO LOOP UNTIL INKEY$ <> "" CLS END SUB |
Основная программа, использующая эту процедуру может выглядеть следующим образом:
CALL bang("TÖÖ") CALL bang("TEGI") CALL bang("AHVIST") CALL bang("INIMESE") |
Следующая процедура рисует концентрические окружности с заданным центром, радиусом, густотой и цветом. Это параметры процедуры.
SUB konring (x, y, raadius, tihedus, varv) FOR i = 1 TO raadius STEP tihedus CIRCLE (x, y), i, varv NEXT i END SUB |
Используем эту процедуру в следующей программе:
SCREEN 12 CALL konring(320, 240, 100, 30, 2) CALL konring(100, 150, 40, 2, 4) |
Используя следующую основную программу и процедуру konring, создадим рисунок обоев:
SCREEN 12 FOR x = 0 TO 640 STEP 40 FOR y = 0 TO 480 STEP 40 CALL konring(x, y, 40, 10, 9) NEXT y NEXT x |
Рассмотрим ещё одну программу:
DECLARE SUB ScreenSaver1 () DECLARE SUB ScreenSaver2 () DECLARE SUB ScreenSaver3 () DO SCREEN 0 'текстовый экран CLS PRINT " Выбери screensaver? [1-3]" PRINT " (для прерывания введи другую цифру)" INPUT Valik$ SELECT CASE Valik$ CASE "1" ScreenSaver1 CASE "2" ScreenSaver2 CASE "3" ScreenSaver3 CASE ELSE END END SELECT LOOP
SUB ScreenSaver1
SCREEN 12 'Включаем графический экран DO x = INT(RND * 639) 'Генерируем координату x. y = INT(RND * 479) 'Генерируем координату y rad = INT(RND * 150) + 10 ' Генерируем радиус col = INT(RND * 15) + 1 'Генерируем цвет CIRCLE (x, y), rad, col 'Рисуем круг LOOP UNTIL INKEY$ <> ""
END SUB
SUB ScreenSaver2
SCREEN 12 'Включаем графический экран DO x = INT(RND * 639) 'Генерируем координату x. y = INT(RND * 479) 'Генерируем координату y rad = INT(RND * 150) + 10 'Генерируем радиус FOR r = 1 TO rad col = INT(RND * 15) + 1 'Генерируем цвет CIRCLE (x, y), r, col 'Рисуем круг NEXT LOOP UNTIL INKEY$ <> ""
END SUB
SUB ScreenSaver3
SCREEN 12 DO x = INT(RND * 639) y = INT(RND * 479) rad = INT(RND * 150) + 10 col = INT(RND * 15) + 1 FOR r = rad TO rad - 10 STEP -2 CIRCLE (x, y), r, col NEXT LOOP UNTIL INKEY$ <> ""
END SUB |