Программирование на языке qbasic



бет12/13
Дата28.06.2016
өлшемі479.5 Kb.
#163119
1   ...   5   6   7   8   9   10   11   12   13

17. Задания



1. Сделать функцию пользователя JUUR(a,b), которая вычисляет корень степени В из А. Использовать функции FUNCTION и END FUNCTION.
Основная программа может иметь вид:


INPUT "Введи число А"; A

INPUT "Введи степень В"; B

PRINT "Ответ:" ; JUUR(A,B)



2. Создать функцию пользователя LOGARITM(A,B), которая вычисляла бы logab.


  1. Создать функцию пользователя ALGARV(x), которая выясняет, что число простое. Значение функции равно –1 (верное), если х является простым числом и 0- (неверное), если х – составное число. Подсказка: Проверить, сколько раз х делится на числа из промежутка от 1 до х. Если два раза, то число простое, иначе –нет. Деление можно проверить с помощью условия A/B=INT(A/B).

Основная программа может иметь вид:


INPUT "Введи число:"; X

IF ALGARV(X) THEN

PRINT "Это простое число!"

ELSE


PRINT "Это не простое число!"

END IF





  1. Создать программу, которая печатала бы все простые числа от 1 до N. Использовать функцию пользователя ALGARV(x). Значение N задаёт пользователь.




  1. Создать функцию пользователя RISTSUMMA(x) для вычисления суммы цифр числа.




  1. Используя операторы SUB и END SUB, создать процедуру TELJESTIK, которая рисовала бы систему координат (единица деления равна 20 писклям). Создать другую процедуру SIRGE(a,b), которая рисовала бы внутри неё прямую y=ax+b. Основная программа могла бы иметь вид:




INPUT "Введи значение а"; a

INPUT "Введи значение в"; b

CALL TELJESTIK

CALL SIRGE(a, b)






  1. Создать процедуру PARABOOL(a,b,c). Основная программа может иметь вид:




INPUT "Введи значение а"; a

INPUT "Введи значение в"; b

INPUT "Введи значение с"; c

CALL TELJESTIK

CALL PARABOOL(a, b, с)





  1. Создать программу нахождения наибольшего общего делителя, отличную от функции пользователя SYT, которая работала бы быстрее, например используя остаток от деления A MOD B. Для измерения скорости работы можно использовать следующую программу:




START=TIMER

PRINT SYT(2,100000)

PRINT "Потребовалось времени: ";TIMER-START;"секунды."




18. Массивы

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

Пример:

Создадим программу , которая вводит имена 5 детей и их возраст и затем печатает их. Сделаем программу без использования массива, а затем с использованием массива.




'Вводим имена

INPUT "Ввести 1. имя"; A$

INPUT " Ввести 2. имя "; B$

INPUT " Ввести 3. имя "; C$

INPUT " Ввести 4. имя "; D$

INPUT " Ввести 5. имя "; E$


'Введём возраст

INPUT "Введи возраст 1. ребёнка"; K

INPUT " Введи возраст 2. ребёнка"; L

INPUT " Введи возраст 3. ребёнка "; M

INPUT " Введи возраст 4. ребёнка "; N

INPUT " Введи возраст 5. ребёнка "; O


'Печать данных

PRINT A$; K; " лет."

PRINT B$; L; " лет."

PRINT C$; M; " лет."

PRINT D$; N; " лет."

PRINT E$; O; " лет."


Для 5 детей программа ещё не очень длинная. А если детей много?

В этом случае используется массив.

Пример:
'Задаём массивы


DIM Nimed$(5) 'символьный массив для имён

DIM Vanused(5) 'числовой массив для возраста


'Вводим имена
FOR I = 1 TO 5

PRINT "Введи имя "; I; ". -го ребёнка";

INPUT Nimed$(I)

NEXT I
'Вводим возраст


FOR I = 1 TO 5

PRINT "Введи возраст "; I; ". –го ребёнка";

INPUT Vanused(I)

NEXT I
'Печатаем имена и возраст


FOR I = 1 TO 5

PRINT Nimed$(I);Vanused(I); " лет."

NEXT I

При создании массива надо его сначала объявить с помощью оператора DIM.



DIM Nimed$(5) – объявляет символьный массив имён из 5 элементов.

DIM Vanused(5) - объявляет числовой массив возрастов из 5 элементов.

Чтобы прочесть из массива конкретный элемент, надо его указать, например



Nimed$(3) –3-е имя из массива имён.

Многомерные массивы

Объявим двумерный массив, в котором 3ряда и 3 столбца:



DIM A(3,3). Для заполнения, например элемента, стоящего во 2-ом ряду и 3- ем столбце пишем:

A(2,3)=2

Для его печати пишем:



PRINT A(2,3)

Аналогично можно определить 3-х мерный массив:



DIM B(2,5,3) и больше, но их трудно себе представить.
Пример:
Создадим программу, которая считает, сколько раз выпадает орёл при бросании монеты M раз. Бросание повторяем N раз (серий). Результаты бросаний заносим в массив.

INPUT "Сколько раз бросаем?"; M

INPUT "Сколько серий делаем?"; N

DIM SEERIA(N) 'Объявляем массив

RANDOMIZE TIMER 'Включаем генератор случайных чисел

FOR J = 1 TO N 'Цикл серии

'обнуляем счётчик

k = 0


FOR i = 1 TO M 'начинаем цикл бросаний

'значение при бросании может быть 1-орёл и 2 –решка

v = INT(RND * 2 + 1)

IF v = 1 THEN k = k+ 1

NEXT i

'заносим ответы в массив



SEERIA(J) = k

NEXT J


'выводим ответы на экран

FOR J = 1 TO N

PRINT ".В ".J; ". cериях было"; SEERIA(J); "орлов."

NEXT J


Пример:
Составим программу, которая позволяет учить иностранные слова. Задаётся количества пар слов N и создаёт массив SONAD$(N,2). Затем пользователь заполняет массив. Затем начинает спрашивать произвольные слова. Пользователь должен дать ответ. Программа проверяет, верно слово или нет. При неправильном ответе показывает верный вариант. После каждого слова экран очищается.


CLS 'чистим экран

INPUT "Сколько пар слов"; N

DIM SONAD$(N, 2)

'заполняем массив

FOR I = 1 TO N

INPUT "Вводим иностранное слово"; SONAD$(I, 1)

INPUT "Вводим перевод"; SONAD$(I, 2)

NEXT I


'начинаем спрашивать

CLS


RANDOMIZE TIMER

DO

V = INT(RND * N + 1) 'случайное число от 1-го до N



PRINT SONAD$(V, 2); "-";

INPUT Sona$

'Для выхода из программы вводим слово «хватит».

IF Sona$ = "хватит" THEN END

'проверяем правильность

IF Sona$ = SONAD$(V, 1) THEN

PRINT "Верно!"

ELSE


PRINT "Неверно!"

PRINT "Верное есть:"; SONAD$(V, 1)

END I

'спим 3 сек



SLEEP 3

CLS


LOOP


Создадим программу, генерирующую 20 случайных чисел из промежутка от 1 до 100 и сортирует их по возрастанию.


N = 20

DIM A(N)

RANDOMIZE TIMER

PRINT "Сортируемые случайные числа:"

FOR NUM = 1 TO N

LET A(NUM) = INT(100 * RND) + 1

PRINT A(NUM);

NEXT NUM


DO

OK = 1


FOR I = 1 TO N - 1

IF A(I) > A(I + 1) THEN

'SWAP меняет значения переменных

SWAP A(I), A(I + 1)

OK = 0 'признак, что обмен произошёл

END IF


NEXT I

LOOP UNTIL OK = 1

PRINT "Отсортированные числа:"

FOR NUM = 1 TO N

PRINT A(NUM);

NEXT NUM


Контролируем до тех пор, пока не произошло ни одного обмена.





Достарыңызбен бөлісу:
1   ...   5   6   7   8   9   10   11   12   13




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет