Читайте также:
|
|
uses crt;
const
c=20;
var i:integer;
m:array[1..20]of integer;
sum,sr:integer;
begin
clrscr;
randomize;
for i:=1 to 20 do
begin
m[i]:=-10+random(20);
write(m[i]:4);
end;
writeln;
asm
{вычисление суммы положительных элементов и их количества}
lea si,m
xor ax,ax
xor dx,dx
mov cx,c
@1: mov bx,[si]
cmp bx,0
jle @3
inc dx
add ax,[si]
@3: add si,2
loop @1
mov sum,ax;
{вычисление среднего арифметического положительных элементов}
mov x,dx
cwd
div bx
mov bx,ax
mov sr,ax;
{если элемент массива меньше среднего арифметического то заменяем его на первый}
xor ax,ax
lea si,m
mov cx,c
mov dx,[si]
@2: cmp [si],bx
jge @4
mov [si],dx
@4: add si,2
loop @2
end;
{выводим результат на экран}
writeln('Sum = Sr = ',sr);
writeln;
for i:=1 to 20 do
write(m[i]:4);
readkey
end.
Дан массив из 30 символов, содержащий слова с одинаковыми первой и последней буквами, но ничем не разделенные. Сформировать новый массив, в котором эти слова были бы разделены пробелами.
{$L 32.obj}
program p01;
Uses crt;
type mystr = string[30];
var a: mystr;
procedure work01(var a:mystr);
external;
Begin
clrscr;
writeln ('Исходная строка: a:= '1sd1113asd33as37df7df7df';
writeln (a);
work01 (a);
writeln (a);
readkey;
End.
.286
public work01
data segment public
temp db 30 dup data ends
code segment byte public
assume cs:code,ds:data
work01 proc near
push bp
mov bp,sp
pusha
lea di,temp;адрес строки Temp
mov si,[bp+4];адрес строки А
xor cx,cx;очистили сч-к
mov cl, [si];кол-во букв в строке А
inc si;перешли на первый символ
mov bx, 1;индекс в строке Temp
;Взять первый символ слова
loop02: mov ah, [si];взять символ из строки А
mov bx[di],ah;Записать его в строку TEMP
inc bx;Увеличить индекс в TEMP
cmp bx, 30;Если вышли за границу строки
je EOP;то на выход
inc si;Перейти к след. букве
loop01: mov al, [si];Считать символ
mov bx[di],al;Записать его в TEMP
inc bx;Увеличить индекс в TEMP
cmp bx, 30;Если вышли за границу строки
je EOP;то на выход
cmp ah, al;Сравнить символы
je match;Если символ = первому символу слова
;то вставить пробел
inc si;Перейти к слещд. символу
loop loop01
jmp EOP;Пока не достигнем конца исх. строки
match:;добавление пробкла в массив TEMP
inc bx;Увеличить индекс в TEMP
cmp bx, 30;Если вышли за границу строки
je EOP;то на выход
mov byte ptr bx[di], ';записать пробел
inc si;след. символ в исх. строке
loop loop02;взять первую букву след. слова
EOP:;перенести Temp в строку
lea si, temp;адрес TEMP
mov di, [bp+4];адрес строки
mov cx, 30;кол-во букв
mov bx, 1;адрес первого символа
loop03: mov ah, bx[si];взять сивол из TEMP
mov byte ptr bx[di],ah;записать его в строку
inc bx;Перейти к след. символу
loop loop03;пока не обработаем всю строку
popa
pop bp
ret 6
work01 endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 255 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
B матрице A[1..N,1..M] упорядочить элементы столбца. содержащего наибольшее количество отрицательных чисел, по убыванию. | | | Подсчитать количество предложений. Расставить предложения по возрастанию количества слов в каждом |