Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KURS_LEKTsIJ_SP_Z_F.rtf
Скачиваний:
32
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

5.2. Контрольная работа №2

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

  1. Y = sin 2x + cos4 x.

  2. Y = (cos 2x + sin x)/2.

  3. Y = sin 2x + cos3 x.

  4. Y = (cos 2x + sin3 x)/3.

  5. Y = (x* sin3 x)/5.

  6. Y = x* cos 2x * sin 2x.

  7. Y = (x2 * sin x)/2.

  8. Y = x2 * cos2 x* sin x.

  9. Y = x3 * sin x* cos x.

  10. Y = (x3 * cos3 x)/3.

  11. Y = x3 * cos x * sin3 x.

  12. Y = 3*cos 2x* x4.

  13. Y =4*sin 3 x*x.

  14. Y = 2*cos 3 x* x2.

  15. Y = x* sin 2 x + x2* cos x.

  16. Y = x* cos2 x+ x3* sin 3 x.

  17. Y = (sin x + x 2)/2.

  18. Y =2* (cos2x +x 2).

  19. Y = x* (sin2 x + x)/2

  20. Y = 2x* (cos2x +x 2)

  21. Y = x2 *(cos x +x).

  22. Y = x2 *(sin x + x)/2.

  23. Y = x3 *(sin x + cos x).

  24. Y = x3 *(sin x + cos x)2.

  25. Y = x2 *(cos x +x)2.

  26. Y = x2 *(sin x +x)3.

6.Примеры программ

;Программа очистки экрана через видеобуфер

.model small

.486

.stack 100h

.code

begin: mov ax,@data

movds,ax

movax,0b800h; адрес видеобуфера текстовых режимов

moves,ax; настройка регистраesна видеобуфер

movdi,00h; настройка регистраdiна начало видеобуфера

movax,0700h; определение атрибутов фона и символа: черный фон , белый символ

mov cx,2000; счетчик числа выводимых символов- выводим на экран 2000 пробелов

rep stosw

movax,4c00h; вызов функции завершения программы

int 21h

end begin

;*****************************************************************

;Программа демонстрации суммирования элементов двух массивов целых чисел

.model small

.486

.stack 100h

.data

M1db1,2,3,4,5; первый исходный массив

M2db6,7,8,9,10;второй исходный массив

M3db5dup(0); массив результата

.code

begin:movax,@data; настройка сегментного регистраds

movds,ax; на сегмент данных

xordi,di;обнуление индексного регистра

movcx,5;определение счетчика цикла

met:moval,M1[di];пересылка элемента М1 в регистр

addal,M2[di];суммирование элементов массивов

movM3[di],al;запись в память результата

incdi; увеличение индекса элемента массива

loopmet; возврат на цикл

kon: mov ah,4ch

int 21h

end begin

;*****************************************************************

;Программа перекодировки символов из 16 системы счисления в ASCIIилиBCDкод

.model small

.486

.stack 100h

.data

SH db 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh

ASCII db '0123456789abcdef'

BCD db 0,1,2,3,4,5,6,7,8,9,10h,11h,12h,13h,14h,15h

.code

begin: mov ax,@data

mov ds,ax

moval,SH[3]; загрузка 3 элемента массива вal

movdl,al; пересылка его вdl

leabx,ASCII; настройка адреса массиваASCIIкодов на регистрbx

xlat; перекодировка: вalвместо 16 кода –ASCII-код

movch,al; сохранение его вch

moval,dl; восстановление 16 кода вal

leabx,BCD; настройка регистраbxна адрес массиваBCD

xlat; перекодировка: вalвместо 16 кода –BCD-код

movcl,al; сохранение его вcl

movah,4ch; завершение программы

int 21h

end begin

;****************************************************************

;Программа ввода и перевода вещественных границ интервала определения функции

.Model Small

.486

.Stack 200h

.Data

bufdb18; буфер для ввода вещественного числа

db0;MSDOSвозвращает число введенных символов

db18dup(0) ; максимальный размер вводимой строки

ten dw 10; константа 10

XL dq 0 ; левая граница интервала

XP dq 0 ; правая граница интервала

mes1db13,10,' Введите левую границу' ,13,10,'$'

mes2db13,10,' Введите правую границу' ,13,10,'$'

mes3db13,10,' Левая граница не может быть равна правой!',13,10,'$'

mes4db13,10,' Левая граница не может быть больше правой!',13,10,'$'

cdw0; переменная для двоичного кода одной цифры числа

;*********************************************************

.Code

GRANPROC; Процедура ввода и перевода вещественного числа

pusha

vvod:

movah, 0Ah; вызов системной функции для ввода строки

lea dx, buf

int 21h

fldz; загрузка в стек сопроцессора 0

movsi, 2; настройкаsiна первый символ введенной строки в буфере

cmpbuf[si],'-'; первый символ - минус?

jeM1; да – переход наM1

cmpbuf[si],'+'; первый символ – плюс?

jneM2; если нет – то переход наM2

M1:incsi; переход к следующему символу в строке

M2:cmpbuf[si],'.'; очередной символ – десятичная точка

jeDrob; если да – то переход на обработку дробной части

cmpbuf[si],0dh; иначе – сравнение с кодом клавишиEnter– признак конца строки

jeKon_enter; если да – то переход на меткуKon_enter

cmpbuf[si],'0'; иначе – проверка: символ это цифра?

jbvvod; если код символа меньше кода нуля – то повторный ввод

cmp buf[si],'9';

javvod; если код символа больше кода девяти – то повторный ввод

moval,buf[si]; если цифра – то загрузить ее код вal

subal,'0'; перевод кода символа цифры в двоичный код

xorah,ah; обнуление регистра

movc,ax; сохранение двоичного кода цифры

fimulten; умножение числа в вершине стека на 10

fildc; загрузка кода цифры в вершину стека

fadd; сложение с предыдущей частью числа

incsi

jmpM2; переход к следующему символу в целой части числа

Drob:; обработка дробной части

fldz

xor bx,bx

movbl,buf[1]; загрузка вbxчисла введенных символов

movsi,bx; настройкаsiна последний символ

incsi

L1:; цикл обработки дробной части

mov al,buf[si]

cmpal,'.'; сравнение с кодом десятичной точки

jeKon_drob; если точка – то завершение обработки дробной части

cmpbuf[si],'0'; проверка кода символа на цифры

jb vvod

cmp buf[si],'9'

javvod

subal,'0'; перевод в двоичный код

xorah,ah

movc,ax; сохранение двоичного кода цифры

fildc; загрузка кода цифры в вершину стека

fadd; сложение с предыдущей дробной частью числа

fidivten; деление на 10

decsi

jmpL1; переход к следующей цифре

Kon_drob:fadd; сложение целой и дробной частей числа

Kon_enter:

cmpbuf[2],'-'; определение отрицательного числа

jneKon; если число положительное – то на меткуKon

fchs; иначе – инвертировать число в вершине стека

Kon:

popa

ret

GRAN endp

;*******************************************

Start:; начало основной программы

mov ax,@data

mov ds,ax

repeat:

finit; инициализация сопроцессора

movah,9; вывод первого сообщения

lea dx,mes1

int 21h

CallGRAN

fstXL; сохранение левой границы интервала

movah,9; вывод второго сообщения

lea dx,mes2

int 21h

CallGRAN

fstXP; сохранение правой границы интервала

fcom; сравнение левой и правой границ

fstswax; передача кодов условия в ЦП

fwait

sahf

jeravno; если границы равны – то ошибка

jbmenshe; если правая граница меньше левой – то ошибка

jmpend_progr; если границы введены верно – то выход из программы

ravno:

mov ah,9

lea dx,mes3

int 21h

jmp repeat

menshe:

mov ah,9

lea dx,mes4

int 21h

jmp repeat

end_progr:

mov ah,4ch

int 21h

End Start

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