Лабараторная работа №5

Организация циклов и работа в целочисленных массивах

Цель работы: Задав одномерный массив целочисленных данных А в одном из заданных форматов (unsigned char — BYTE, unsigned short int — WORD, char — SHORTEST, short int — INTEGER или long int — LONGINT), реализовать обработку массива, как указано в варианте. Длина массива N. Исходные данные задать самостоятельно, учитывая формат элементов массива А. В программе на Паскале должны быть предусмотрены функции ввода-вывода элементов массива А и его обработки. Исходные данные должны вводиться корректно и с проверкой на область допустимых значений. Тип результата определяется из контекста задачи..
Ход работы:
Порядок работы:

  1. внимательно изучить свой вариант обработки элементов массива;
  2. написать на базовом алгоритмическом языке программу ввода исходных данных
    (с контролем допустимого диапазона), обработки элементов массива и вывода
    полученного результата;
  3. написать модуль обработки элементов массива на языке Ассемблера;
  4. встроить вызов этою модуля в программу на базовом алгоритмическом языке;
  5. произвести тестовые проверки, отметить нормальные и аномальные результаты,
    сделать анализ результатов

A[i]<=c/d

Составляем листинг программы на языке TP v 7.1
Листинг программы
Program  Lab4P4;
Uses CRT;

 Label
M1, M2 ,Merror,Mexit, L1;
var
c, d,k:ShortInt;
xl, i, n , x, er,ran, j: integer;
a :array [1..1000] of shortint;
key : char;

Procedure ASMB;
Label
Beg, endf, err, FIN;
begin
x:=0;
Writeln ('c/d=>a[i]');
Write('const c: ');
Readln(c);
Write('const d: ');
Readln(d);
writeln;
ASM

        cmp d, 0
mov er, 1
JE err
mov er, 0
mov cx, n
mov si, cx
mov dx, 0
mov al, c
cbw
idiv d
Beg:
dec si
cmp byte ptr a+si, al
JG endf
inc dx
endf:
loop beg
mov xl, dx
err:

end;
if (er=1) then
Begin
writeln ('error: devision by zero');
goto FIN;
end
else
writeln ('error: none ');
writeln;
write ('array: ');
for i:=n downto 1 do
write (a[i], ' ');
writeln;
writeln;
writeln('ASSEMBLER:');
writeln('result x=', xl);
writeln;
writeln('TP:');
write ('result array: ');
for i:=n downto 1 do
Begin
if (a[i]<=c div d) then
Begin
write (a[i], ' ');
x:=x+1;
end;
if (i=1)and(x=0) then
write ( 'none');
end;
writeln;
writeln('result x=',x);
writeln;
FIN:

end;
Begin
clrscr;
randomize;
write ('a:array lengh in [1..n], value in [0..x] ... ');
write ('waiting value n: ');
readln (n);
write ('waiting value x: ');
readln (ran);
for i:=1 to n do
Begin
a[i]:=random(ran+1);
end;
repeat
clrscr;
ASMB;
writeln ('Exit ... press yes or no (y/n)');
key:=readkey;
until key='y';
end.
Скриншот:

Вернутся к заглавию

Сайт создан в системе uCoz