القائمة الرئيسية

الصفحات

حساب عاملي عدد بلغة تجميع معالج ميبس

برنامج حساب عاملي عدد بلغة تجميع معالج ميبس
 (Assembleur du processeur MIPS R 3000)



حساب عاملي عدد Factorielle d'un nombre entier



1. تقديم

في التدوينة السابقة قمنا بإنجاز برنامج بلغة تجميع معالج ميبس (Assembleur du processeur MIPS R 3000) يحسب عدد أس عدد xn (puissance) حيث x  و n عددين صحيحين، وقد طلبنا أن نعدلها لتحسب
الأس السالب التي قمنا بإنجازها في تدوينة عدد أس عدد موجب وسالب puissance positif et négative، كما إقترحنا تحويل البرنامج إلى حساب عاملي عدد n ! (factorielle).
في هذه التدوينة سنقوم بتعديل الخوارزميات و البرامج السابقة لنحسب عاملي عدد n !.

2. خوارزمية حساب العاملي

الخوارزمية algorithme التي تحسب عدد قوة عدد (الأس) تقوم بتكرار ضرب العدد في نفسه n  مرة لأن:
xn= x*x*….*x        n مرة
بينما حساب عاملي عدد n ! (factorielle) فهو حاصل جداء كل الأعداد الأقل أو تساوي n و يتم بالطريقة التالية:
n ! = 1*2*….*n      n>=0
عندما نطابق العبارتين نجد فرقا واحدا وهو أن في الأس : الجداء هو جداء العدد في نفسه n مرة بينما العاملي هو جداء الأعداد الأقل أو تساوي العدد n.

أي من أجل الأس:
p <- 1;
pour i <- 1 à n faire
    p <- p * x;
finpour
بينما من أجل العاملي:
p <- 1;
pour i <- 1 à n faire
    p <- p * i;
finpour

فتكون لدينا تقريبا نفس الخوارزمية من أجل الأس و العاملي، و فيما يلي الخوارزمية التي تحسب n ! :

// Factorielle d'un nombre entier
Algorithme factorielle;
var n, p, i : entier;   
debut
    // la factorielle est pour les nombres entiers positifs seulement
    répeter
         ecrire (" Donner un nombre entier pour le factoriel n ");
lire(n);
    jusqu'à n >= 0;  
   
    // boucle de calcul du factoriel  
    p <- 1;
    pour i <- 1 à n faire
         p <- p * i;
    finpour
   
    // affichage de la valeur de la factorielle
    ecrire(" la factorielle est ", p );
fin.

3. برنامج حساب العاملي بلغة تجميع معالج ميبس

فيما يلي برنامج يحسب عاملي عدد n! (factorielle) حيث n عدد صحيح موجب. سنضيف هنا متغيرات نقوم يتخزين القيمة المدخلة في الذاكرة المركزية مباشرة بعد الإدخال ثم نقوم بتحميلها  (charger) إلى سجل (registre)  فيما بعد وفيها و كذلك نخزن العاملي الذي نحصل عليه.

# Factorielle d'un nombre entier
.data

m1 : .asciiz " Donner un nombre entier positif n   "
m2 : .asciiz " la factorielle est  " 

.text
main:

# n! = 1*2*...*n

# lecture de la valeur de n, n doit etre positif
readn : la $a0 , m1
li $v0 , 4
syscall
li $v0 , 5
syscall
bltz $v0 , readn
move $t0 , $v0

# $t1 contient le compteur de la boucle
li $t1 , 1

# $t2 contient la valeur de la factorielle 
li $t2 , 1

# boucle de calcul de la factorielle
boucle : bgt $t1 , $t0 , exit
mul  $t2 , $t2 , $t1
addi $t1 , $t1 , 1
j boucle

exit:

# Affichage de la factorielle
la $a0 , m2
li $v0 , 4
syscall
move $a0 , $t2
li $v0 , 1
syscall

# fin du programme
li $v0 , 10
syscall

.end main

واجهة برنامج QtSpim

1. نفذ البرنامج من أجل قيم موجبة و معدومة و سالبة هل يعطي نتائج صحيحة في كل الحالات.

قم بترك أجوبتك و تعديلاتك على تعليق حتى يتكمن الجميع من فهم و تعديل البرنامج.

ليصلك الجديد و تبقى دائما على إطلاع تابع مدونتنا و زر بإستمرار صفحاتنا على الفيس بوك : :الأستاذ بن مير عبد القادر و baek-oasis

تعليقات