ضرب مصفوفتين مخزنتين في متجهين
عرف الرئيسية(): عدد {
دع أ: متجه عدد = [1, 2, 3, 4, 5, 6, 7, 8, 9];
دع ب: متجه عدد = [9, 8, 7, 6, 5, 4, 3, 2, 1];
دع ج: متغير متجه عدد = [0, 0, 0, 0, 0, 0, 0, 0, 0];
دع الصف: متغير طبيعي = 0;
طالما (الصف < 3) {
دع العمود: متغير طبيعي = 0;
طالما (العمود < 3) {
دع ك: متغير طبيعي = 0;
دع المجموع: متغير عدد = 0;
طالما (ك < 3) {
دع قاعدة_يسار: طبيعي = الصف * 3;
دع قاعدة_يمين: طبيعي = ك * 3;
دع موضع_يسار: طبيعي = قاعدة_يسار + ك;
دع موضع_يمين: طبيعي = قاعدة_يمين + العمود;
المجموع := المجموع + (أ[موضع_يسار] * ب[موضع_يمين]);
ك := ك + 1;
}
دع قاعدة_الناتج: طبيعي = الصف * 3;
دع موضع_الناتج: طبيعي = قاعدة_الناتج + العمود;
ج[موضع_الناتج] := المجموع;
العمود := العمود + 1;
}
الصف := الصف + 1;
}
أرجع ج[4];
}def main(): int {
let a: vector int = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let b: vector int = [9, 8, 7, 6, 5, 4, 3, 2, 1];
let c: mutable vector int = [0, 0, 0, 0, 0, 0, 0, 0, 0];
let row: mutable uint = 0;
while (row < 3) {
let col: mutable uint = 0;
while (col < 3) {
let k: mutable uint = 0;
let sum: mutable int = 0;
while (k < 3) {
let left_base: uint = row * 3;
let right_base: uint = k * 3;
let left_index: uint = left_base + k;
let right_index: uint = right_base + col;
sum := sum + (a[left_index] * b[right_index]);
k := k + 1;
}
let output_base: uint = row * 3;
let output_index: uint = output_base + col;
c[output_index] := sum;
col := col + 1;
}
row := row + 1;
}
return c[4];
}
التشغيل
بالمفسر، دون ترجمة:
./build/sultanc run examples/ar/algorithms/matrix_multiply.snأو ترجمه إلى ملف تنفيذي:
./build/sultanc examples/ar/algorithms/matrix_multiply.sn -o build/example && ./build/example