السلام عليكم .... :27: اهلا لو سمحتوا ابغى تساعدوني في كتابة بعض البرامج
كيف اكتب برنامج فيc يحول من عشري الى ثنائي؟
وشلون اكتب معادلة تحسب رقم اللي هو ناتج جمع الحدين اللي قبله
(fibonacci sequence)
الله يعافيكم ساعدوني في حلها لان عندي واجب وما عرفت احله....
Ehsan__11 @ehsan_11_1
عضوة جديدة
يلزم عليك تسجيل الدخول أولًا لكتابة تعليق.
اهلا......جزاك الله خيرا ...اسفة على التاخر في الرد انا سويت مثل اللي قلتي بس النتائج تكون معكوسه يعني 36 بدل ماتكون(100100) تطلع (001001) الله يعافيك اذا كنت تعرفين داله تعكس علميني
تحياتي....:27:
تحياتي....:27:
صحيح كلامك .. يكون الناتج معكوس
بس أنا ما أعرف لهذه اللغة .. و إلا كان حليت السؤال
أو لو أن اللغة المستخدمة الجافا .. كان حليته في دقائق
كل اللي أعرفه أشياء بسيطة ..
على العموم .. هذا حل الدكتور كنت معاه اليوم و طلبت منه أن يحل المسألة
فحله بطريقة طويلة .. و عمل أن يطلب البرنامج في البداية من المستخدم إدخال رقم
و ثم يحول البرنامج الرقم المدخل إلى عدد ثنائي
و هذا هو حله باللون الأحمر
( حددي الكود و ظلليه بالفأرة و انسخيه )
#include<stdio.h>
main()
{
int num,no_bits;
clrscr();
printf("enter a number");
scanf("%d",&num);
no_bits=count_bits(num);
printf("number of bits %d\t",no_bits);
bin_print(num,no_bits);
}
count_bits(int n)
{
int i=0;
for (;n!=0;n=n>>1)
i++;
return(i);
}
bin_print(int x, int n_bits)
{
int j;
printf("no. %d in binary \t",x);
for(j=n_bits-1; j>=0;j--)
printf("%i",(x>>j) & 01);
}
بالنسبة لـ fibonacci sequence
هذا هو الكود
int fib(int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fib(n-1) + fib(n-2);
}
و فيه كود ثاني أفضل .. و هو
int fib2(int n) {
int m = 0;
int k = 1;
int i;
for (i = 0; i < n; i++) {
int tmp = m + k;
m = k;
k = tmp;
}
return m;
}
و للتأكد .. إذا أعطينا البرنامج الرقم واحد .. راح يكون الناتج كالتالي :
1
1
2
3
5
8
13
21
34
55
89
144
233
377
فكل رقم هو عبارة عن مجموع الرقمين اللي قبله
تأكدي من صحة البرنامجين الأخيرين المكتوبة بالأزرق .. لأني أنا كتبتها بعد ما غيرت فيها شوي .
هذا كل اللي عندي .. أختي
أتمنى لك التوفيق ،،
بس أنا ما أعرف لهذه اللغة .. و إلا كان حليت السؤال
أو لو أن اللغة المستخدمة الجافا .. كان حليته في دقائق
كل اللي أعرفه أشياء بسيطة ..
على العموم .. هذا حل الدكتور كنت معاه اليوم و طلبت منه أن يحل المسألة
فحله بطريقة طويلة .. و عمل أن يطلب البرنامج في البداية من المستخدم إدخال رقم
و ثم يحول البرنامج الرقم المدخل إلى عدد ثنائي
و هذا هو حله باللون الأحمر
( حددي الكود و ظلليه بالفأرة و انسخيه )
#include<stdio.h>
main()
{
int num,no_bits;
clrscr();
printf("enter a number");
scanf("%d",&num);
no_bits=count_bits(num);
printf("number of bits %d\t",no_bits);
bin_print(num,no_bits);
}
count_bits(int n)
{
int i=0;
for (;n!=0;n=n>>1)
i++;
return(i);
}
bin_print(int x, int n_bits)
{
int j;
printf("no. %d in binary \t",x);
for(j=n_bits-1; j>=0;j--)
printf("%i",(x>>j) & 01);
}
بالنسبة لـ fibonacci sequence
هذا هو الكود
int fib(int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fib(n-1) + fib(n-2);
}
و فيه كود ثاني أفضل .. و هو
int fib2(int n) {
int m = 0;
int k = 1;
int i;
for (i = 0; i < n; i++) {
int tmp = m + k;
m = k;
k = tmp;
}
return m;
}
و للتأكد .. إذا أعطينا البرنامج الرقم واحد .. راح يكون الناتج كالتالي :
1
1
2
3
5
8
13
21
34
55
89
144
233
377
فكل رقم هو عبارة عن مجموع الرقمين اللي قبله
تأكدي من صحة البرنامجين الأخيرين المكتوبة بالأزرق .. لأني أنا كتبتها بعد ما غيرت فيها شوي .
هذا كل اللي عندي .. أختي
أتمنى لك التوفيق ،،
الصفحة الأخيرة
و بخصوص سؤال التحويل من عشري لثنائي .. أعتقد أنه لازم تستخدمين دالة الباقي و اللي رمزها هو ( % )
فترمزي للعدد العشري مثلا بالرمز ( n )
و إذا كان العدد ( n ) أقل من ( 2 ) فإننا نطبعه كما هو
لكن إذا كان أكبر فلازم تعملي حلقة تكرار .. كل مرة تحسبي ( n%2 )
و تطبعين الناتج .. إلى أن تصبح قيمة ( n ) هي ( 1 )
و هذه هي طريقة التحويل من عدد عشري إلى عدد ثنائي .. للتوضيح
لنفترض أنا أخذنا هذا الرقم العشري ( 36 )
الحين نبغى نحوله إلى عدد ثنائي .. أيش نعمل ؟؟
الجواب كالتالي ::::
نقسم العدد العشري على ( 2 )
و مثل ما هو في المثال .. الناتج نأخذه من الباقي .. من تحت لأعلى
فيكون العدد العشري ( 36 ) يكافئ العدد الثنائي ( 100100 )
و تقدرين تتأكدين من الحل و ذلك بأخذ العدد الثنائي ( 100100 ) و تحولينه من جديد إلى عدد عشري كالتالي :
التحويل :
( 100100 ) = ( 0 × 1 ) + ( 0 × 2 ) + ( 1 × 4 ) + ( 0 × 8 ) + ( 0 × 16 ) + ( 1 × 32 )
= ( 36 )
هذا أول كورس أخذته في هندسة الكومبيوتر .. و كان هذا من وقت طويل قبل حوالي الثلاث سنين .
أتمنى أن أكون أفدتك و لو بالشئ القليل .. تحياتي