PDA

View Full Version : جمع دو ماتریس



نیکناز
شنبه 21 اسفند 1389, 13:39 عصر
سلام
کسی می تونه به من کمک کنه؟
من برنامه ای و می خوام که دو تا ماتریس در ورودی دریافت کنه و جمع اونها رو در خروجی نمایش بده .
مرسی

xman_1365_x
یک شنبه 22 اسفند 1389, 19:43 عصر
سلام
کسی می تونه به من کمک کنه؟
من برنامه ای و می خوام که دو تا ماتریس در ورودی دریافت کنه و جمع اونها رو در خروجی نمایش بده .
مرسی
با توجه به اينكه شما قبلا اين سوال رو پرسيدين (1 (http://barnamenevis.org/showthread.php?254757)) اما فكر ميكنم هنوز متوجه نشديد.(همينطور با يك جستجو ديدم خيلي هاي ديگه هم همين سوال رو داشتن)
*مي دانيم رم حافظه اي يك بعدي هست!
1-براي دست رسي به عناصر در آرايه هاي يك بعدي
location(x)=base(A) + x * size(var type)
base آدرس شروع
x خانه اي كه مي خواهيد دسترسي داشته باشيد
size بستگي به نوع متغير داره مثلا DB يك بايت و DW دو بايت فضا از حافظه اشغال ميكنه
2-براي ذخيره سازي ماتريس در حافظه رم كه حافظه اي يك بعدي هست از دو روش ذخيره سازي استفاده ميشه
الف-روش سطري ب-روش ستوني
*روش سطري و ستوني نحوه دسترسي به عناصر در آرايه را مشخص ميكند (مثلا شما سطر به سطر اطلاعات را بخوانيد يا ستون به ستون)
*روش سطري در بيشتر زبان هاي سطح بالا امروزي استفاده ميشه و نمونه اي هم براي ذخيره سازي ستوني زبان فرترن هست.
براي بدست خانه x ام از [a[m][n به روش سطري و ستوني به طريق زيرعمل ميكنيم
الف-روش سطري:
a[i][j] = base(A) + (i * n + j) * size
ب-روش ستوني:
a[i][j] = base(A) + (i * m + j) * size

حال پياده سازي با زبان اسمبلي:


.data
; add your data here!
pkey db "press any key...$"
x dw 1,2,3,4,5,6,7,8,9,10,11,12
m dw 4 ;matrix row
n dw 3 ;matrix column
i dw 2 ;user select row
j dw 1 ;user select column
size dw 2 ;x size in memory is 2byte

.stack dw 128 dup(0)

.code
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

xor ax,ax
mov ax,n ;n
mov bx,i ;i
mul bx ;i*n
add ax,j ;((i*n)+j)
mov bx,size ;2=size
mul bx ;((i*n)+j)*size
mov di,ax
mov ax,x[di] ;ax=8 and x[di]=x[2][1]=8

lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; wait for any key....
mov ah, 1
int 21h

mov ax, 4c00h ; exit to operating system.
int 21h

end start ; set entry point and stop the assembler.


موفق باشي