Программирование на алгометрическом языке QBASIC

Разделы: Информатика


Темы для изучения: Линейный алгоритм. Разветвляющийся алгоритм. Циклический алгоритм. Цикл с известным числом повторений. Цикл с предусловием. Цикл с постусловием. Массивы. Процедуры и функции. Графические возможности QB.

Задачи модуля:

  • образовательные: закрепить знания при работе со средой QB,выработать умение составлять простейшие программы в этой среде.
  • воспитательные: повышение мотивации учащихся; совершенствовать навыки общения, воспитывать умение работать самостоятельно и в группе.
  • развивающие: развитие логического мышления и воображения, внимания и памяти; формирование критического мышления; умения анализировать, выделять главное, обобщать и делать выводы.

Учащиеся должны знать:

  • назначение алгоритма и его определение;
  • свойства алгоритма;
  • формы представления алгоритма;
  • типовые алгоритмические конструкции;
  • представление алгоритма в виде блок-схемы;
  • основные стадии разработки алгоритма.
  • графические исполнители в среде программирования QBasic.
  • исполнитель DRAW. Исполнитель LINE. Исполнитель CIRCLE.

Учащиеся должны уметь:

  • объяснять структуру основных алгоритмических конструкций и уметь использовать их для построения алгоритмов;
  • знать основные типы данных и операторы (процедуры) для одного из языков программирования;
  • уметь разрабатывать и записывать на языке программирования типовые алгоритмы;
  • приводить примеры алгоритмов из разных сфер;
  • составлять алгоритмы для различных ситуаций или процессов в виде блок-схем;
  • разрабатывать циклические алгоритмы на основе различных видов циклов.

Введение в язык программирования Basic.

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

Basic (Бейсик) создавался в 60-х годах в качестве учебного языка и очень прост в изучении. По популярности занимает первое место в мире.

Некоторые операторы языка Basic.

REM – оператор комментария.

CLS – очистить экран.

PRINT (вывод, печать) – оператор вывода.

INPUT (ввод) – оператор ввода.

DIM – оператор описания типа переменной. .

Для задания значения переменной служит оператор присваивания. Он записывается так:
LET переменная = значение (или просто: переменная = значение)

END – оператор конца программы

Арифметические операции на языке Basic.

Операция

Обозначение Пример Результат
Сложение + 2+5 7
Вычитание 10–8 2
Умножение * 3*4 12
Деление / 15/3
15/4
5
3.75
Целочисленное деление \ 15\4 3
Возведение в степень ^ 2^3 8
Остаток от деления MOD 13 MOD 5 3

Математические функции на языке Basic.

Корень SQR(X)
Модуль числа ABS(X)
Синус SIN(X)
Косинус COS(X)
Тангенс TAN(X)
Целая часть числа INT(X)
Натуральный логарифм LOG(X)

Линейная структура программы.

Программа имеет линейную структуру, если все операторы (команды) выполняются последовательно друг за другом.

Пример: Вычислите площадь прямоугольника по его сторонам.

REM Площадь прямоугольника
INPUT "Введите сторону а", а
INPUT "Введите сторону b", b
s = a * b
PRINT "Площадь равна: ", s
END

Пример: Вычислите длину окружности и площадь круга по данному радиусу.

REM Вычисление длины окружности и площади круга
INPUT "Введите радиус ", r
PI = 3.14
l = 2 * PI * r
s= PI * r * r
PRINT "Длина окружности равна: ", l
PRINT "Площадь равна: ", s
END

Ветвление в алгоритмах и программах.

Разветвляющий алгоритм – это алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий.

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

IF <УСЛОВИЕ> THEN <ОПЕРАТОР>

или

IF <УСЛОВИЕ> 
<ОПЕРАТОР 1>
<ОПЕРАТОР 2>

<ОПЕРАТОР N>.

Условия – еще один тип логических выражений. В них используются следующие операторы сравнения:

= равно
<> не равно
> больше
< меньше
>= больше или равно
<= меньше или равно

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

IF...THEN...ELSE...END IF.

IF <УСЛОВИЕ> THEN 
<ОПЕРАТОРЫ 1>
ELSE
<ОПЕРАТОРЫ 2>
END IF

Пример: Проверить, равно ли введенное число некоторому значению, и в случае равенства выдать на экран сообщение о равенстве чисел.

REM сравнить число со каким-то значением
INPUT "Введите а", а
IF a=7 THEN PRINT "Числа равны"
END

Пример: Определить большее из двух чисел, вывести его на экран, затем – увеличить его в двое и вывести результат на экран.

REM определить большее из двух чисел...
INPUT "Введите а", а
INPUT "Введите b", b
IF a=b TNEN
PRINT "Числа равны"
с=2*a
ELSE
IF a>b THEN
PRINT "Большее число: ", a
с=2*a
ELSE
PRINT "Большее число: ", b
с=2*b
END IF
END IF
PRINT "результат: ", c
END

Пример: Решение квадратного уравнения.
Решение квадратного уравнения зависит от значения дискриминанта.

REM Решение квадратного уравнения
INPUT "Введите коэффициент a: ", а
INPUT "Введите коэффициент b: ", b
INPUT "Введите коэффициент c: ", c
d=b*b-4*a*c
IF d<0 THEN
PRINT "Корней нет"
ELSE
IF d=0 THEN
x=-b/(2*a)
PRINT "корень уравнения: ", x
ELSE
x1=(-b-SQR(d))/(2*a)
x2=(-b+SQR(d))/(2*a)
PRINT "корни уравнения: ", x1, x2
END IF
END IF
END

Структура "Выбор".

Структура IF... позволяет выбрать между двумя вариантами. Если требуется осуществить выбор между большим числом вариантов, то это можно организовать используя лишь структуру IF... Но можно (что чаще проще) и с помощью структуры "Выбор". Эта структура имеет вид:

SELECT CASE <Выражение>
CASE <условие 1>
<серия 1>
CASE<условие 2>
<серия 2>
...
CASE ELSE
<серия иначе>
END SELECT

Выражение, заданное после ключевых слов SELECT CASE, сравнивается с определенными значениями – условиями и если они истинны, то выполняется соответствующая серия команд. Если не одно условие не истинно, то выполняется серия команд между CASE ELSE и END SELECT.

Пример: Выдать словесное значение числа

REM Преобразование чисел в слова
INPUT "Введите число", a
SELECT CASE a
CASE 1
PRINT "один"
CASE 2
PRINT "два"
CASE 3
PRINT "три"
...
CASE 10
PRINT "десять"
CASE ELSE
PRINT "это число не могу перевести"
END SELECT
END

Циклы а алгоритмах и программах

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

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

Такие циклы называются – циклы со счетчиком.

На языке Basic они записываются следующим образом:

FOR Счетчик=НачЗнач TO КонЗнач [STEP шаг]
тело цикла
NEXT [Счетчик]

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

Пример: Вывести на экран все числа от 1 до 100.

REM Вывод чисел от 1 до 100
FOR I=1 TO 100
PRINT I
NEXT
END

Легко сделать чтобы программа выводила числа в обратном порядке. Для этого шаг цикла должен быть равен -1 (минус один). В этом случае значение счетчика каждый раз после прохождения цикла будет уменьшено на единицу.

REM Вывод чисел от b до a
a=55
b=107
FOR I=b TO a STEP -1
PRINT I
NEXT
END

Пример: Вычислить сумму двухзначных натуральных чисел.

REM Вычислить сумму двухзначных натуральных чисел
FOR I=10 TO 99
s=s+I
NEXT
PRINT "Результат = ",s
END

Пример: вычислить факториал числа а (записывается так: а!). Факториал – это произведение чисел от 1 до а. Например, 5! (факториал пяти) – это 5!=1*2*3*4*5

REM Вычислить факториал числа
a=5
f=1
FOR I=1 TO a
f=f*I
NEXT
PRINT f
END

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

Циклы такого вида называют – циклы с предусловием.

На языке Basic они записываются следующим образом:

DO WHILE условие
Тело цикла
LOOP

В этом цикле проверяется условие и если оно выполняется (ИСТИНА), то выполняется тело цикла до ключевого слова LOOP, затем условие проверяется снова ... и так до тех пор пока условие истино.

DO UNTIL условие
Тело цикла
LOOP

Этот цикл отличается от предыдущего только тем, что он выполняется до тех пор пока условие не истинно (т.е. совсем наоборот).

Пример: Вывести все натуральные числа меньше данного.

REM Вывод всех чисел меньше данного
a=0
chislo=10
DO WHILE a<chislo
PRINT a
a=a+1
LOOP
END

Вам надо поточить все карандаши в коробке. Вы точите один карандаш и откладываете его в сторону. Затем проверяете, остались ли карандаши в коробке. Если условие ложно, то снова выполняется действие 'заточить карандаш'. Как только условие становится истинным, то цикл прекращается.

Циклы такого вида называют – циклы с постусловием.

На языке Basic они записываются следующим образом:

DO
Тело цикла
LOOP WHILE условие

DO
Тело цикла
LOOP UNTIL условие

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

Пример: Вычислите сумму цифр в числе.

REM Сумма цифр числа
DIM a, chislo, s AS INTEGER
INPUT "Введите число: ", chislo
a=chislo
DO
s=s+a MOD 10
a=a/10
a=INT(a)
LOOP UNTIL a=0
PRINT "Сумма цифр числа ",chislo ," равна: ", s
END

Массивы. Одномерные массивы.

При работе с большим числом данных одного типа очень удобно использовать массивы.

Для того чтобы использовать массив его надо сначала объявить в программе. Для этого используют оператор DIM. По умолчанию (если нет оператора DIM в программе) считается заданным массив из 10 элементов.

Пример: Составить программу заполнения массива из 15 элементов случайными числами в диапазоне от 1 до 10. Предусмотреть вывод массива на экран.

REM Заполнение и вывод массива
DIM mas(15) AS INTEGER
FOR I=0 TO 14
mas(I)=1+INT(RND*10)
NEXT
CLS
PRINT "Вывод массива"
FOR I=0 TO 14
PRINT mas(I);
NEXT
END

Пример: Вывести количество отрицательных элементов массива.

REM Вывести количество отрицательных элементов
INPUT "Введите число элементов массива", n
DIM mas(n) AS INTEGER
FOR I=0 TO n-1
INPUT "Введите элемент массива", mas(I)
NEXT
CLS
PRINT "Вывод массива"
FOR I=0 TO n-1
PRINT mas(I);
NEXT
FOR I=0 TO n-1
IF mas(I)<0 THEN k=k+1
NEXT
PRINT
PRINT "Число отрицательных элементов: ",k
END

Подсчет количества отрицательных элементов массива происходит в цикле:

FOR I=0 TO n-1
IF mas(I)<0 THEN k=k+1
NEXT

Пример: Составить программу для вычисления наибольшего элемента массива и его номера.

REM вычисления наибольшего элемента массива и его номера
INPUT "Введите число элементов массива", n
DIM mas(n) AS INTEGER
FOR I=0 TO n-1
INPUT "Введите элемент массива", mas(I)
NEXT
CLS
PRINT "Вывод массива"
FOR I=0 TO n-1
PRINT mas(I);
NEXT
max=mas(0)
nomer=1
FOR I=0 TO n-1
IF mas(I)>max THEN
max=mas(I)
nomer=I+1
END IF
NEXT
PRINT
PRINT "Максимальный элемент: ", max, " с номером ", nomer
END

Пример: составить программу сортировки массива по возрастанию.

REM сортировка массива
INPUT "Введите число элементов массива", n
DIM mas(n) AS INTEGER
FOR I=0 TO n-1
mas(I)=1+INT(RND*10)
NEXT
CLS
PRINT "Вывод массива"
FOR I=0 TO n-1
PRINT mas(I);
NEXT
REM сортировка массива
FOR I=0 TO n-2
FOR J=I+1 TO n-1
IF mas(I)>mas(J) THEN
REM если нашли меньший элемент, то обменяем их местами
a=mas(I)
mas(I)=mas(J)
mas(J)=a
END IF
NEXT J
NEXT I
REM конец сортировки массива
PRINT
PRINT "Вывод отсортированного массива"
FOR I=0 TO n-1
PRINT mas(I);
NEXT
END

Пример: ввод массива с использование оператора DATA.

REM Ввод данных из DATA
DIM mas(5) AS INTEGER
DATA 2, -4, 1, 5, 9
REM ввод массива
FOR I=0 TO 4
READ mas(I);
NEXT
REM вывод массива
FOR I=0 TO 4
PRINT mas(I);
NEXT
EN

Массивы. Двумерные массивы.

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

Объявляются двумерные массивы так же, как переменные и одномерные массивы. Например, целочисленный числовой массив, содержащий 3 строк и 4 столбца объявляется следующим образом:

DIM tabl(3 ,4)

DIM tabl(3 ,4) AS INTEGER

REM Таблица умножения
DIM tabum (1 TO 9, 1 TO 9) AS INTEGER
REM Заполнение массива – создание таблицы умножения
FOR I=1 TO 9
FOR J=1 TO 9
tabum(I, J)=I*J
NEXT J
NEXT I
REM Вывод массива на экран в виде таблицы
FOR I=1 TO 9
FOR J=1 TO 9
PRINT tabum(I,J);
NEXT J
PRINT
NEXT I
END

Пример: В таблице 3х4 вычислить количество отрицательных элементов, сумму четных элементов, произведение элементов второй строки.

REM вычислить количество...
DIM tabl(1 TO 3, 1 TO 4) AS INTEGER
REM Заполнение массива
FOR I=1 TO 3
FOR J=1 TO 4
INPUT "Введите элемент массива:", tabl(I, J)
NEXT J
NEXT I
REM Вывод массива на экран в виде таблицы
CLS
FOR I=1 TO 3
FOR J=1 TO 4
PRINT tabl(I,J);
NEXT J
PRINT
NEXT I
REM требуемые вычисления
k=0
s=0
p=1
FOR I=1 TO 3
FOR J=1 TO 4
IF tabl(I, J)<0 THEN k=k+1
IF tabl(I, J) MOD 2 = 0 THEN s=s+tabl(I, J)
IF I=2 THEN p=p*tabl(I, J)
NEXT J
NEXT I
PRINT
PRINT "результ:"
PRINT "отрицательных элементов: ", k
PRINT "сумма четных элементов: ", s
PRINT "произведение элементов второй строки: ",p
END

Символьные и строчные переменные.

Для того, чтобы использовать такие переменные в программе необходимо их соответствующим образом объявить. Для этого используется уже известный оператор DIM.

DIM s AS STRING
s="Cтрока123"

Или добавлять справа от переменной символ $.

s$="Тоже строка 987"

Пример:

REM Сравнение строк
s1$="abc"
s2$="abc"
s3$="klmn"
IF s1$=s2$ THEN PRINT "Строки равны"
IF s1$=s3$ THEN PRINT "Строки равны"
END

Функции для работы со строками:

LEN(s$) Вычисляет длину строки (количество символов).
MID$(s$,n,k) Выделяет из строки s$ k символов начиная с n-го символа.
VAL(s$) Преобразует числовую часть начала строки в число.
STR$(x) Преобразует число в символьную форму.
ASC(s$) Вычисляет десятичный код символа.
CHR$(x) Преобразует код в символ.
INKEY$ Функция опроса клавиш, нажатых на клавиатуре.

Пример: составить программу подсчитывающую, количество букв "а" в предложении.

REM кол-во букв "а"
INPUT "Введите предложение", s$
FOR I=1 TO LEN(s$)
IF MID$(s$,I,1)="а" THEN k=k+1
NEXT
PRINT "Кол-во букв а =", k
END

Пример: Заменить все буквы "а" в предложении на буквы "о".

REM замена букв
ss$=""
INPUT "Введите предложение", s$
FOR I=1 TO LEN(s$)
IF MID$(s$,I,1)="а" THEN
ss$=ss$+"о"
ELSE
ss$=ss$+MID$(s$,I,1)
END IF
NEXT
PRINT "Исправленная строка: ", ss$
END

Пример: Получить предложение в обратном порядке следования символов.

REM обратный порядок букв
ss$=""
INPUT "Введите предложение", s$
FOR I=LEN(s$) TO 1 STEP -1
ss$=ss$+MID$(s$,I,1)
NEXT
PRINT "Исправленная строка: ", ss$
END

Дополнительные возможности Basic: Приложение1 в окне правка / правка слайдов возможно доработать презентацию.

Графический режим работы: Приложение 2