المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : سؤال في كيفية تنفيذ المعالج لعملية معينة



CR@N$H
05-10-2010, 17:27
السلام عليكم و رحمة الله و بركاته
هناك تعليمة وضعت عقلي بكفي ساعات و ساعات و لم أجد الحل في معرفة كيفية عملها
هي تعليمة RND أو RAND حسب لغة البرمجة إذ أن هذه التعليمة تولد قيمة عشوائية تتوضع بين الصفر و الواحد و عند الرغبة في حصول مثلا على رقم عشوائي بين 0 و 10 مثلا نضرب الناتج من هذه العملية ب10 "عملية برمجية بحتة"
السؤال هنا كيف يستطيع هذا المعالج الغبي اتخاذ قرار الرقم المختار ؟
هل ينظر إلى قيمة احد المسجلات و يضعها بصيغة Fixed Point أم يقوم بالعد لحين حدوث Interrupt مثلا ام ماذا ؟؟؟؟

Maxwell
05-10-2010, 21:57
طبعا لم اصل الى هذه المرحلة المتقدمة ني هندسة الحاسب التي ادرسها حاليا ولكني اظن انها مبنية بحسب نظام معين داخل نظام البرمجة المتبع سواء كان assembly او c

وقد وجدت عبر جوجل بحثا يفيد في طريقة اختيار رقم عشوائي في الاسمبلي

في المرفقات........

CR@N$H
05-10-2010, 22:22
مشكور اخي و إن شاء الله توفق في الدراسة "هل أخذت في ما تدرس لغة الRTL أم ليس بعد"
على كل حال الملف يناقش موضوع مختلف عما قد طرحته فهو يتحدث عن كيفية تصميم برنامج ليختار قيمة من مجموعة عينات موجودة مسبقا على عكس ما تقوم به تعليمة Rand فهي تعطي قيمة خاصة كلما نفذت ولا تشترط وجود قيم محددة سابقا و الاغرب من هذا وجدتها على معالج يحوي على وحدة حساب و منطق للأعداد الصحيحة فقط موجود في متحكم ذاكرته لا تتخطى ال8KB بشكل كامل
هذا لا يمنعني من تقييمك طبعا

CR@N$H
06-10-2010, 16:24
للتذكير و المناقشة
أي أخ لديه اي فكرة حتى و إن كانت فرضية فانا مستعد للمناقشة

CR@N$H
06-10-2010, 18:24
وجدت الحل و الحمد لله
Linear Feedback Shift Registers
https://en.wikipedia.org/wiki/Linear_feedback_shift_register
هذه الطريقة فد درستها من قبل في الجامعة و لكني قد تهت عنها
Pseudorandom number generator
https://en.wikipedia.org/wiki/Pseudo-random_number_generator

BlueGene
06-10-2010, 19:01
السلام عليكم

إذا كنت تقصد الدالة ( function) من المكتبة القياسية libc المسماة ()rand فهي تعتمد على خوارزمية معينة لتوليد
رقم عشوائي. وقبل استخدام هذه الدالة يجب ان نستخدم قبلها الدالة ()srand ووضيفة هذه الاخيرة انها تأخذ رقم صحيح
وتستخدمه كرقم اساسي لتوليد سلسلة من الارقام العشوائية.

شاهد هذا الكود بلغة C:



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
srand(5);
printf("\nFirst Random Number: %d", rand());
return 0;
}

لاحظ اننى قمت بتمرير رقم للدالة srand لتستخدمه كرقم اساسي لتوليد ارقام عشوائية
وكانت هذه هي النتيجة:

https://i51.tinypic.com/14doqbn.jpg

الدالة rand الان ستعطيك ارقام عشوائية كل مرة تطلبها, لكن المشكلة انها في كل مرة يقوم المستخدم بتشغيل
البرنامج فسيحصل على نفس الارقام .
جرب الكود بالاعلى , اعد تشغيله وستلاحض انك ستحصل على الرقم 54 في كل مرة.
والسبب اننا مررنا قيمة ثابته لـ srand و لكي نحصل على رقم متغير كل مرة نقوم بتشغيل البرنامج
سنستخدم الدالة time وهي تقوم بتمريم قيمة متغيرة مكونة من رقم السنة حتى رقم الثانية التي تم فيها استدعائها.

لاحظ الكود بعد التغيير:



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
srand(time(NULL));
printf("\nFirst Random Number: %d", rand());

return 0;
}

الان نلاحض ان البرنامج يعطي رقم عشوائي كل مرة نقوم بتشغيله .

CR@N$H
06-10-2010, 19:16
فهي تعتمد على خوارزمية معينة لتوليد
مشكور أخي و انا كنت ابحث عن الخوارزمية و ليس عن التعليمة نفسها