Условие: разработка алгоритма. Условия приведены в описании заданий.




Курсовая работа по информатике

студента группы СПВ-16-99 Богачева Ф.О.

 

 

Тема: простые циклы

 

 

Содержание:

 

 

Содержание ………………………….2

Техническое задание ….…………………3

Первое задание …………………4

Решение дополнительных условий первого задания ………………6

Второе задание …………...13

Список литературы ………..15

 

 

Техническое задание.

 

Первое задание:

 

Составить простой цикл для вычисления заданной функции. Числовые данные приведены для дальнейшего программирования и машинного счета. Самостоятельно модифицировать вариант задания исходных данных и построить все три варианта простого цикла.

 

Y = arctg (x-20), где Х(0) = 18,6; приращение аргумента за шаг 0.2; Х(1) = 21.4

 

 

Второе задание:

 

Составить алгоритм решения задачи

 

 

Y=0 При X =< 0

 

Y= X При 0< X =< 1

 

Y= -X^2 + 4X -@ При 1< X =< 3

 

Y= 4X При X > 3

 

 

Дополнительные условия:

 

Вывести таблицу значений из первого задания, составить график функции, алгоритм выполнения первого задания. Для получения оценки «Отлично» сделать учет времени выполнения программы в первом задании.

 

 

Первое задание:

 

В языке Basic стандартного варианта для IBM-совместимых машин (MS. Quick basic 4.5 или Ms, Quick basic PDS 7.1) существует три варианта построения простого цикла. Первый вариант – это цикл, построенный на стандартном для всего Бейсика операторе FOR …. NEXT. Цикл For-Next выполняется только в том случае если начало плюс шаг меньше или равняется конечному значению счетчика. Если конец меньше начала, то значение счетчика должно быть отрицательным. Если начало и конец имеют равные значения, цикл выполняется один раз, если щаг равен нулю, то цикл выполняется неопределенное время.

 

 

CLS

FOR phil = 18.6 TO 21.4 STEP.2

y = ATN(phil - 20)

PRINT phil, y

NEXT phil

END

 

Вверху построен цикл по условиям текущего задания. Рассмотрим поподробнее эту простую программу. Первый оператор – CLS, названный так от англ. “CLear Screen”. В QB 4.5 этот оператор имеет три значения CLS [0,1,2].Если все аргументы опущены, то оператор очищает и графический и текстовый экраны. Это равнозначно аргументу [0]. Аргумент [1] очищает только графический экран, если он активен, а аргумент [2] – текстовый, исключая нижнюю строку.

 

Следующая строка – задание условий цикла. Цикл назван “phil”, он будет считаться от 18.6 до 21.4 с ша гон 0.2.

 

Далее идет вычисление текущего значения Y в зависимости от значения переменной “phil”. Значение Y вычисляется с помощью встроенной математической функции ATN (Функция, возвращающая арктангенс числового выражения).

 

Следом за ней идет оператор PRINT, который выводит на экран текущие значения переменных “Phil” и Y. Переменная “phil” – это значения по оси 0Х, Y – 0Y.

 

END – Конец программы. Теперь рассмотрим второй вариант построения простого цикла, основанного на операторе WHILE – WEND. Это управляющий оператор, выполняющий блок операторов до тех пор, пока указанное условие истинно. Пока условие истинно, блок операторов в теле цикла будет выполняться. Если условие ложно, будет выполнен оператор, следующий за WEND.

 

CLS

x! = 18.6

s! =.2

x1! = 21.4

WHILE x < x1

y = ATN(x - 20)

x = x + s

PRINT x, y

WEND

END

 

Выше приведен пример программы цикла, разработанной с учетом требований ТЗ. Аналогично рассмотрим этот вариант цикла. Первой строкой идет очистка экрана, следующие три строки – задание переменных, необходимых для будущих вычислений. Знак {!} указывает на то, что это должный быть переменные с двойной точностью. Потом идет сам цикл, основанный на операторе WHILE – WEND. Указано, что цикл должен выполняться до тех пор, пока значение X(0) будет меньше Х(1). В теле цикла программа выполняет все тоже вычисление арктангенса, поэтому мы это рассматривать не будем, а сразу перейдем к третьему варианту построения простого цикла в Бейсике – циклу, основанном на операторе DО – LOOP.

 

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

 

 

CLS

x! = 18.6

s! =.2

x1! = 21.4

DO

y = ATN(x - 20)

PRINT x, y

x = x + s

LOOP UNTIL x >= x1

END

 

 

Выше приведен пример программы в соответствии с текущим ТЗ. Начало и блок вычислений полностью идентичны предыдущему примеру, поэтому рассмотрим только сам цикл. Он начинается с оператора DO И оканчивается оператором LOOP, в котором указано условие – продолжать цикл до тех пор, пока переменная Х(1) больше или равна переменной Х.

 

 

Теперь объединим все три простые программы в одну, для удобства пользователя.

 

CLS

x! = 18.6

s! =.2

x1! = 21.4

PRINT "Нажмите 1 для демонстрации цикла, основанного на For-Next"

PRINT "Нажмите 2 для демонстрации цикла, основанного на While-Wend"

PRINT "Нажмите 3 для демонстрации цикла, основанного на Do-Loop"

PRINT "Нажмите 4 для выхода"

DO

ch$ = INKEY$

LOOP WHILE ch$ = ""

chval = VAL(ch$)

IF chval > 0 AND chval < 5 THEN ON chval GOTO foring, whiling, looping, exi

foring:

FOR phil = 18.6 TO 21.4 STEP.2

y = ATN(phil - 20)

PRINT x, y

NEXT phil

GOTO exi

whiling:

WHILE x < x1

y = ATN(x - 20)

x = x + s

PRINT x, y

WEND

GOTO exi

looping:

DO

y = ATN(x - 20)

PRINT x, y

x = x + s

LOOP UNTIL x >= x1

exi:

END

 

Рассмотрим эту программу. Логика выполнения: пользователь нажимает на клавиатуре кнопки от 1 до 5, по которые считываются с клавиатуры с помощью оператора INKEY$ и осуществляется переход на нужный цикл с помощью оператора ON … GOTO. Предварительная обработка ASCII кода осуществляется с при помощи оператора VAL.

 

Дополнительные условия к первому заданию:

 

 

Учет времени выполнения программы.

 

В MS QB это можно реализовать двумя способами:

 

А) Через функцию TIME$

B) Через функцию TIMER

 

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

 

CLS

T! = TIMER

 

[программа]

 

T1! = TIMER

T2= T1-T

PRINT “Время выполнения программы”, T2, “секунд”

 

Скорость выполнения простой программы на современной машине составит менее секунды, поэтому есть резон использовать язык низкого уровня – ассемблер. Вычисление времени на ассемблере проводится с помощью функции 2Ch прерывания INT 21h. Ниже дан пример программы:

 

 

.model small

.code

.386

org 100h

 

programm:

jmp begin1

 

sec100 db 0

begin1: mov ah,9

 

lea dx,startmess

int 21h

mov ah,2ch

int 21h

mov sec100,dl

 

lea dx,answer

mov ah,9

int 21h

 

mov ah,2ch

int 21h

push dx

lea dx,tmess

mov ah,9

int 21h

pop dx

sub dl,sec100

jnc nos11

add al,10

nos11: mov al,dl

add al,"0"

mov dl,al

mov ah,2

int 21h

lea dx,tmess2

mov ah,9

int 21h

int 20h

 

startmess:

tmess: db 'Время исполнения 0.0$'

tmess2: db ' секунд.',0dh,0ah,"$"

 

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

 

Алгоритм выполнения задания на примере цикла, основанном на операторе FOR - NEXT

 

 

 
 


Начало

 

 
 

 


Нет

 

 
 

 


ДА

 
 

 

 



График функции для первого задания

Альтернативный вариант программы, объединяющей в себе все три варианта цикла и выполняющей подсчет времени исполнения.

 

DECLARE SUB DrawResult (vyb#)

DECLARE SUB DrawMeny (vyb#)

DEFDBL A-Z

CONST UP% = 72, DOWN% = 80, ESC = 27, ENTER = 13

 

 

vybor = 1

 

DO

CALL DrawMeny(vybor)

SELECT CASE vybor

CASE 1 TO 3: CALL DrawResult(vybor)

CASE IS = 0: COLOR 7, 0: CLS: END

END SELECT

LOOP

 

 

SUB DrawMeny (vyb)

 

COLOR 0, 3: CLS: COLOR 0, 7

 

REDIM Meny$(3)

Meny$(1) = " Simple example of FOR...NEXT "

Meny$(2) = " Simple example of WHILE...WEND "

Meny$(3) = " Simple example of DO...LOOP "

LOCATE 9, 36: PRINT " ESC = QUIT "

LOCATE 10, 25: PRINT "г" + STRING$(32, "=") + ""

 

FOR i = 1 TO 3

LOCATE 10 + i, 25

PRINT USING "¦\" + STRING$(30, " ") + "\¦"; Meny$(i)

NEXT i

LOCATE 14, 25: PRINT "L" + STRING$(32, "=") + "-"

 

COLOR 4, 7

DO

FOR i = 1 TO 3: LOCATE 10 + i, 26: PRINT " ": NEXT i

LOCATE 10 + vyb, 26: PRINT CHR$(16)

DO

a$ = INKEY$:

IF a$ <> "" THEN

IF a$ = CHR$(ESC) THEN vyb = 0: EXIT SUB

IF a$ = CHR$(ENTER) THEN EXIT SUB

kod = ASC(RIGHT$(a$, 1))

SELECT CASE kod

CASE IS = UP

vyb = vyb - 1: IF vyb = 0 THEN vyb = 3

EXIT DO

CASE IS = DOWN

vyb = vyb + 1: IF vyb = 4 THEN vyb = 1

EXIT DO

CASE ELSE: BEEP

END SELECT

IF kod = UP OR kod = DOWN THEN EXIT DO

END IF

LOOP

LOOP

 

END SUB

 

SUB DrawResult (vyb)

 

x = 18.6

s =.2

x1 = 21.4

COLOR 0, 3: CLS: COLOR 0, 7

LOCATE 4, 25: PRINT "г" + STRING$(29, "=") + ""

 

 

Begin = TIMER

SELECT CASE vyb

 

CASE IS = 1

LOCATE 3, 35: PRINT " FOR...NEXT "

FOR phil = x TO x1 STEP s

y = ATN(phil - 20)

junk = junk + 1: LOCATE junk + 4, 25

PRINT USING "¦ x = ###.### y = ###.### ¦"; x; y

NEXT phil

 

CASE IS = 2

LOCATE 3, 35: PRINT " WHILE...WEND "

WHILE x < x1

y = ATN(x - 20): x = x + s

junk = junk + 1: LOCATE junk + 4, 25

PRINT USING "¦ x = ###.### y = ###.### ¦"; x; y

WEND

 

CASE IS = 3

LOCATE 3, 35: PRINT " DO...LOOP "

DO

y = ATN(x - 20)

junk = junk + 1: LOCATE junk + 4, 25

PRINT USING "¦ x = ###.### y = ###.### ¦"; x; y

x = x + s

LOOP UNTIL x >= x1

 

END SELECT

LOCATE 19, 25: PRINT "L" + STRING$(29, "=") + "-"

SLEEP 1: Finish = TIMER

 

LOCATE 20, 25: PRINT USING " Begin time = ######.### "; Begin

LOCATE 21, 25: PRINT USING " Finish time = ######.### "; Finish

LOCATE 22, 25: PRINT USING " Total time = ###.### "; Finish - Begin

 

 

DO: LOOP WHILE INKEY$ = ""

 

END SUB

 

Программа отличается от своей предшественницы графическим оформлением, более понятным интерфейсом с пользователем, но и гораздо большим временем исполнения кода. Если программа, рассчитанная на минимальное быстродействие, выполняется в интерпретаторе менее, чем за 0.01 секунды, то в этом варианте время исполнения достигает почти секунды, и это при условии запуска на процессоре AMD-K6-2-350. Для облегчения восприятия кода ниже даются скриншоты выполнения программы с комментариями.

 

 


 

Рис. 1 – меню выбора варианта цикла

 

 


 

Рис.2 – демонстрация работы цикла FOR-NEXT с подсчетом времени работы и результатов вычисления

 

 


 

Рис. 3 – демонстрация цикла WHILE-WEND


Рис.4 – демонстрация работы цикла Do… Loop

 

Второе задание:

 

Условие: разработка алгоритма. Условия приведены в описании заданий.

 

 

       
 
 
   

 

 


 

 
 

 


Нет Да

       
   
 

 

 


Нет ДА

Да Нет

 

 


Пример программы на MS QB для второго задания:

 

CLS

INPUT X

If X > 1 THEN GOTO B

IF X > 0 THEN Y=X ELSE Y=0

Goto printing:

B:

If X > 3 THEN Y = 4X ELSE Y=-x^2 + 4X –2

Printing:

PRINT Y


END

 

 

График функции для второго задания.

 

 

Cписок используемой литературы:

 

H.H. Осейко, EXLEL 5.0, Киев, 1994

Григорий Зельднер, Quick Basic 4.5, АБФ, 1994

Григорий Зельднер, MS Quick Basic PDF 7.1

Л.Скэнлон, прогграммирование на языке ассемблера,,Радио и связь, 1989

В, Юров, Ассемблер, Питер, 2000

В.Н. Пильщиков, Программирование на языке ассемблера IBM PC, Диалог-МИФИ, 1996

К.Айден, Х.Фибельман, Аппаратные средства PC, Bnv,1996

Р.Данкан, Профессиональная работа в МС-ДОС, Мир, 1993

Д.В.Стефанков, Справочник программиста и пользователя, Кварта, 1993

F.O.Mankubus, Не вздумай убивать своего учителя, или что от тебя хочет преподаватель, КБ, 1998

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: