Консультация № 180389
21.10.2010, 22:52
0.00 руб.
0 5 1
Эксперты, помогите с задачей:
Создать матрицу B[1..N,1..M] из целых чисел. Из каждой строки матрицы определить числа, которых нет в следующей строке и записать их в одномерный массив.
Матрицу можно создать как в паскале, сортировка на ассемблере.

Обсуждение

давно
Посетитель
7438
7205
21.10.2010, 23:59
общий
Посетитель - 340758:
Матрицу можно создать как в паскале
Что значит можно?

1) Создаем матрицу в вызывающей программе на ассемблере и вызывем подпрограмму с параметрами
(адреса массива и вектора), которая и "прошерстит" матрицу и создаст одномерный массив.

2) Можно вызывать ассемблерную внешнюю подпрограмму из программы на Паскале

3) Можно использовать встроенный ассемблер

И как будем делать?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.10.2010, 16:24
общий
Лысков Игорь Витальевич:
uses crt;
const n=6; m=6;
type matr=array[1..n+m,1..n+m] of real;
var a,b:matr;
imin,jmin,k,i,j:integer;

procedure VVOD(var d:matr;k:integer); {вводим матрицу}
begin
for i:=1 to k do
for j:=1 to k do
d[i,j]:=random(20);
end;

procedure VIVOD(d:matr;k:integer;t:string); {выводим матрицу}
begin
writeln;
writeln(t);
for i:=1 to k do begin
for j:=1 to k do
write(d[i,j]:4:0);
writeln;
end;
end;

вот так)
давно
Посетитель
7438
7205
24.10.2010, 01:23
общий
Посетитель - 340758:
Отлично. Уточните еще, какой должна быть подпрограмма на ассемблере:
отдельным модулем или надо (можно) использовать встроенный ассемблер?

Саму программу Вам обещал написать в понедельник эксперт Зенченко Константин Николаевич,
если только кто-то другой не напишет раньше.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
24.10.2010, 11:34
общий
Лысков Игорь Витальевич:
встроенный ассемблер в паскале.
давно
Старший Модератор
31795
6196
25.10.2010, 14:44
общий
это ответ
Здравствуйте, Посетитель - 340758!

Смотрите приложение.
Код писался под встроенный ассемблер ТР 7.0.
Вопросы задавайте в мини-форум.
Удачи!

Приложение:
const
n=5;
m=6;
type
tMatrix=array[1..n,1..m]of integer;
tMassiv=array[1..n*m]of integer;
{определяем переменные}
var
z:tMatrix;
x:tMassiv;
y:integer;
{процедура создания матрицы}
procedure Vvod(var a:tMatrix);
var
b,c:integer;
begin
randomize;
for b:=1 to n do
begin
for c:=1 to n do
begin
a[b,c]:=random(20);
write(a[b,c]:3);
end;
writeln;
end;
end;
{процедура вывода массива}
procedure Vivod(a:tMassiv;b:integer);
var
c:integer;
begin
writeln('Vivod:');
for c:=1 to b do
write(a[c]:3);
end;
{процедура стортировки}
procedure Sort;
begin
asm
push ds
pop es
lea bx,z{настраиваемя на матрицу и массив}
lea di,x
push di
mov cx,n-1{проверяем на одну строку меньше}
{A}
@@04:
push cx{запоминаем параметры цикла}
mov si,bx{указатель на первый элемент строки}
mov cx,m{количество элементов в строке}
add bx,2*m{переходим к следующей строке}
{B}
@@03:
{считываем проверяемый элемент}
lodsw
{запоминаем параметры внешнего цикла}
push cx
push si
{настраваемся на цикл проверки}
mov si,bx
mov cx,m
{цикл проверки совпадаений в следующей строке}
@@01:
cmp ax,[si]{проверяем совпадение}
jz @@02{совпала - заканчиваем цикл}
add si,2{следующий элемент}
loop @@01
{запоминаем проверенный элемент}
stosw
@@02:
pop si{востанавливаем параметры цикла В}
pop cx
loop @@03
{востанавливаем параметр цикла А}
pop cx
loop @@04
{запоминаем количество элементов}
pop ax
sub di,ax
shr di,1
lea si,y
mov [si],di
end;
end;
begin{main}
Vvod(z);
Sort;
Vivod(x,y);
readln;
end.{main}
5
большое спасибо!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа