Курс лекций для студентов заочного факультета самара

Вид материалаКурс лекций

Содержание


5.ВАРИАНТЫ КОНТРОЛЬНЫХ РАБОТ 5.1.Контрольная работа №1
5.2. Контрольная работа №2
6.Примеры программ
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   13

5.ВАРИАНТЫ КОНТРОЛЬНЫХ РАБОТ

5.1.Контрольная работа №1


Реализовать ввод элементов массива с контролем допустимых кодов символов и диапазона значений элементов массива. Вывести элементы полученных массивов на экран.

Вариант 1

Из исходного массива двузначных десятичных чисел со знаком получить два новых, поместив в первый из них значения элементов, превосходящих среднее значение массива, а во второй номера этих элементов (среднее = ).

Вариант 2

Из двух исходных массивов двузначных десятичных чисел без знака X и Y cформировать массив Z, поместив в него все элементы исходных, превышающие общее среднее = .

Вариант 3

Из исходного массива двузначных десятичных чисел со знаком получить два новых, поместив в первый из них номера максимальных, а во 2-ой номера минимальных элементов исходного. (Предполагается, что MIN и MAX могут быть не единственными).

Вариант 4

Найдите в массиве двузначных десятичных чисел без знака X все элементы и их номера и поместите эти значения в два новых массива Y - элементов и Z - индексов.

Вариант 5

Из исходного массива X двузначных десятичных чисел со знаком сформировать массив Y- отклонений от среднего () и массив Z- номеров элементов исходного массива, превышающих среднее.

Вариант 6

Выявить все номера элементов массива двузначных десятичных чисел без знака X, превышающих .. В результате сформировать два массива: Y- массив номеров и Z- массив значений, для которых выполняется заданное условие.

Вариант 7

Из исходного массива двузначных десятичных чисел со знаком X получить новый массив Y ().

Подсчитайте среднее = .

Вариант 8

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

Вариант 9

Из исходного массива двузначных десятичных чисел со знаком X получить два новых Y и Z, таких что:



Вариант 10

Получить из исходного массива X двузначных десятичных чисел без знака два новых Y, Z, поместив в них элементы и номера элементов массива X, для которых выполняется условие .

Вариант 11

Получить из исходного массива X двузначных десятичных чисел без знака два новых Y и Z, поместив в них номера элементов и их значения, для которых выполняется условие .

Вариант 12

Получить из исходного массива X двузначных десятичных чисел со знаком два новых Y, Z, поместив в Y элементы, для которых выполняется условие , а в Z – элементы, для которых выполняется условие

Вариант 13

Из исходного массива X размера n двузначных десятичных чисел без знака получить два новых Y и Z, поместив в Y элементы, значения которых меньше (X1+Xn)/ 2, а в Z - номера этих элементов.

Вариант 14

Из исходного массива X двузначных десятичных чисел со знаком получить два новых Y и Z, поместив в первый из них нечетные значения элементов массива, а во второй – их номера.

Вариант 15

Из исходного X двузначных десятичных чисел без знака получить два новых Y, Z,, поместив в первый из них номера элементов превышающих заданное число А, а во второй - элементы, значения которых меньше среднего в массиве (среднее = ).

Вариант 16

Получить из исходного массива X двузначных десятичных чисел без знака два новых Y и Z, поместив в них элементы и номера, для которых выполняется условие x i <= xi-1 + xi+1.

Вариант 17

Из исходного массива двузначных десятичных чисел без знака X получить два новых Y и Z, таких что:



Вариант 18

Получить из исходного массива X двузначных десятичных чисел со знаком два новых Yb Z, поместив в них элементы и номера элементов массива X, для которых выполняется условие: xi <= xmax – xmin.

Вариант 19

Получить из исходного массива X двузначных десятичных чисел со знаком два новых Y, Z, помеcтив в них номера элементов и их значения, для которых выполняется условие: xi < (xi-1 +xi +xi+1)/3.

Вариант 20

Получить из исходного массива X двузначных десятичных чисел без знака два новых Y и Z, поместив в них элементы и номера, для которых выполняется условие: xi >= (x1 +xn.)/4.

Вариант 21

Из исходного массива X двузначных десятичных чисел со знаком получить два новых Y и Z, поместив в Y элементы, значения которых меньше (xmax-xmin)/ 4, а в Z - номера этих элементов.

Вариант 22

Из исходного массива X двузначных десятичных чисел без знака получить два новых Y и Z, поместив в первый из них четные значения элементов массива, а во второй – нечетные значения элементов.

Вариант 23

Из исходного X двузначных десятичных чисел со знаком получить два новых Y, Z,, поместив в первый из них номера элементов не превышающих заданное число А, а во второй - элементы, значения которых больше среднего в массиве (среднее = ).

Вариант 24

Получить из исходного массива X двузначных десятичных чисел со знаком два новых Y, Z, поместив в них элементы и номера, для которых выполняется условие x i <= (xi-1 + xi+1.)/2.

Вариант 25

Из исходного массива двузначных десятичных чисел без знака получить два новых, поместив в первый из них значения элементов, не превосходящих среднее значение массива, а во второй номера этих элементов (среднее = ).

Вариант 26

Из двух исходных массивов двузначных десятичных чисел со знаком X и Y cформировать массив Z, поместив в него все элементы исходных, не превышающие общее среднее = .

Вариант 27

Из исходного массива двузначных десятичных чисел со знаком получить два новых, поместив в них значения и номера элементов, для которых выполняется условие

Вариант 28

Из исходного массива двузначных десятичных чисел без знака X получить два новых Y и Z, таких что:



Вариант 29

Из исходного массива X двузначных десятичных чисел со знаком получить два новых Y и Z, поместив в первый из них значения нечетных элементов массива, а во второй значения четных элементов.

Вариант 30

Из исходного X двузначных десятичных чисел без знака получить два новых Y, Z, поместив в первый из них номера элементов превышающих заданное число А, а во второй - элементы, значения которых меньше среднего в массиве (среднее = ).

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

mov ds,ax

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

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

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

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

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

rep stosw

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

int 21h

end begin

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

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

.model small

.486

.stack 100h

.data

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

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

M3 db 5 dup(0); массив результата

.code

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int 21h

end begin

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

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

.Model Small

.486

.Stack 200h

.Data

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

db 0; MS DOS возвращает число введенных символов

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

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

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

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

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

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

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

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

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

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

.Code

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

pusha

vvod:

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

lea dx, buf

int 21h

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

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

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

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

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

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

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

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

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

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

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

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

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

cmp buf[si],'9';

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

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

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

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

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

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

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

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

inc si

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

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

fldz

xor bx,bx

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

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

inc si

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

mov al,buf[si]

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

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

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

jb vvod

cmp buf[si],'9'

ja vvod

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

xor ah,ah

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

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

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

fidiv ten; деление на 10

dec si

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

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

Kon_enter:

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

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

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

Kon:

popa

ret

GRAN endp

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

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

mov ax,@data

mov ds,ax

repeat:

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

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

lea dx,mes1

int 21h

Call GRAN

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

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

lea dx,mes2

int 21h

Call GRAN

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

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

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

fwait

sahf

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

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

jmp end_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

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

  1. Григорьев В.Г. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). Книга 1. Программная архитектура. - М., ГРАНАЛ, 1993. - с.346, ил.87.
  2. Григорьев В.Г. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). Книга 2. Аппаратная архитектура. Книга 3. Устройство с плавающей точкой. Книга 4. Справочник по системе команд. - М., ГРАНАЛ, 1993. - с.382, ил.54.
  3. Юров В. Assembler, -СПб: Питер, 2001, - 624 с.
  4. Зубков С.В. Assembler для Dos, Windows и UNIX. 2 – е изд., испр. и доп. – М., ДМК, 2000. – 608 с.