الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برنامج يطبع المتسلسلة ......

بدأه angel20 في 17 نوفمبر 2010 · 15 رد · 9,518 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا باخواني واخواتي الاعزاء

اريد احد ان يفهمني كيف او طريقة حل .....

1- اكتب برنامج يطبع المتسلسلة التالية :

المعطيات:

a=0 ;

b=1 ;

اريد ان اشرح لكم كيف المتسلسلة:

0+1=1

1+1=2

1+2=3

2+3=5

3+5=8

8+13=21

13+21=34

21+34=55

34+55=89

كهذا المتسلسلة............انا عملت هكذا من الصورة......

ارجو مساعدتي في فهمها باستخدام For (كيفية حلها).......

post-236446-082550300 1290005366_thumb.j

المرفقات
متسلسلة.jpg
1
#2

ارجو مساعدتي في السؤال.........

#3

المرة القادمة ضع محاولاتك حتى نساعدك في الحل..

#include <iostream>
using namespace std;

int main (int argc, char* argv[]) {
	int a = 0 ;
	int b = 1 ;

	for (int i=0; i<10 ; i++) {
		int tmp = a + b;

		cout << a << " + " << b << " = " << tmp << endl;
		a = b;
		b = tmp ;
	}
}

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#4

مرحبا اخي

مشكور على الحل صحيح 100%

بس بدي اغلبك اخي بس الجزء من الكود اول مرة بشوفه

using namespace std;

int main (int argc, char* argv[])

احنا نستعمل هكذا

#include <iostream.h>

() main

}

ارجو انك فهمت علي..........

تم تعديل هذه المشاركة بواسطة angel20 في 18 نوفمبر 2010 في 13:04

#5

لأنك تعمل على مترجم قديم ولذلك تستخدم iostream.h .. المترجمات الجديدة تدعم المقياس الأحدث من اللغه (من حوالي 13 سنة تقريباً، فقط :) ) ..وعليك أن تستخدم iostream بدلاً منها.. ابحث في المنتدى للمزيد اذا أردت عنها.

الدالة main يمكن أن تأخذ معاملات وفي تلك الحالة عليك باستقبالها كما قمت به، ومن الأفضل كتابتها حتى لو لم ترسل لها معاملات..

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#6

مرحبا اخي

انا عملت هيك وطلع 6 error

اقتباس

#include <iostream.h>

main()

{

// اخي هذا السطر اريده بطريقه اخرى (int argc, char* argv[])

{

int a = 0 ;

int b = 1 ;

for (int i=0; i<10 ; i++)

{

int tmp = a + b;

cout << a << " + " << b << " = " << tmp << endl;

a = b;

b = tmp

}

}

}

الخطأ

D:\New folder\Cpp1.cpp(6) : error C2146: syntax error : missing ')' before identifier 'argc'

D:\New folder\Cpp1.cpp(6) : error C2065: 'argc' : undeclared identifier

D:\New folder\Cpp1.cpp(6) : error C2062: type 'char' unexpected

D:\New folder\Cpp1.cpp(6) : error C2059: syntax error : ')'

D:\New folder\Cpp1.cpp(7) : error C2143: syntax error : missing ';' before '{'

D:\New folder\Cpp1.cpp(19) : error C2143: syntax error : missing ';' before '}'

D:\New folder\Cpp1.cpp(23) : warning C4508: 'main' : function should return a value; 'void' return type assumed

Error executing cl.exe.

Cpp1.exe - 6 error(s), 1 warning(s)

تم تعديل هذه المشاركة بواسطة angel20 في 18 نوفمبر 2010 في 14:51

#7
#include <iostream.h>
#include <conio.h>
main ()
{
        int a = 0 ;
        int b = 1 ;

        for (int i=0; i<10 ; i++) {
                int tmp = a + b;

                cout << a << " + " << b << " = " << tmp << endl;
                a = b;
                b = tmp ;
        }
getch();
}

هذا كود الاخ وجدي , بس عدلته ليتناسب مع المترجم ..

تم تعديل هذه المشاركة بواسطة إشراقة فجر في 18 نوفمبر 2010 في 15:03

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#8

السلام عليكم و رحمة الله تعالى و بركاته

أعتذر عن التأخير .. الردود لا تظهر في صفحتي الشخصية إلا عندما أوافق عليها :happy:

=======

يبدو أنك تستخدم المترجم العجوز .. بورلاند أو أحد أقاربه ! :P

قمتُ بكتابة هذا الكود على borland c++ v 4.5, الفكرة هي أن المتتالية تمثل شكلا من أشكال متتالية فيبوناسي, أي أن الحد الحالي يساوي مجموع الحدود التي قبله :

#include<iostream.h>
int main()
{
    int U0 = 0,U1 = 1,Un,n,i;
    cout<<"n = ";
    cin>>n;
    if(n>=0)
    {
       if(n == 0 || n == 1)
       cout<<"U"<<n<<" = "<<n<<"\n";
       if(n >= 2)
       {
          for(i = 2;i <= n;i++)
          {
                Un = U0 + U1;
                U0 = U1;
                U1 = Un;
          }
          cout<<"U"<<n<<" = "<<Un<<"\n";
       }
    }
    else
    cout<<"erreur !\a le nombre n doit être supérieur ou égal zéro\n";
  return 0;
}

الكود يطلب من المستخدم إدخال عدد صحيح, إذا كان أقل من الصفر ستظهر الرسالة :

اقتباس

erreur ! le nombre n doit être supérieur ou égal zéro

و معناها :

خطأ, العدد n يجب أن يكون موجب أو معدوم.

أما إذا كان العدد n أكبر أو يساوي الصفر فسيتم إظهار القيمة المساوية للحد Un :)

نصيحة : عليك باستخدام أحد المترجمات الحديثة لكي تتمكن من العمل على اكواد قياسية و تدعم الأشياء الجديدة في اللغة.

بالتوفيق.

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 18 نوفمبر 2010 في 15:35

#9

مرحبا اخواني الاعزاء

انا استخدم برنامج فيجول C++ 6.0

انا اريد السؤال مثلا لما ادخل رقم يعطيني الرقم الذي يليه.................وهكذا

مثلا ادخل رقم 5 يعطيني رقم 8 وهكذا هي المتسلسلة....

مشكورين.........

تم تعديل هذه المشاركة بواسطة angel20 في 18 نوفمبر 2010 في 18:40

#10
اقتباس
انا اريد السؤال مثلا لما ادخل رقم يعطيني الرقم الذي يليه.................وهكذا

مثلا ادخل رقم 5 يعطيني رقم 8 وهكذا هي المتسلسلة....

سبحان الله العظيم !, هل جربت الكود الذي أعطيتك إياه !؟

الكود يطلب من المستخدم إدخال رقم الحد n ثم يظهر نتيجة Un

على الأقل .. إن لم تضع محاولتك .. قم بتجربة الأكواد المكتبوبة ! :happy:

#11

اخي طلع البرنامج ما بطبع المتسلسلة صح

انا وضعت 5 اعطاني 5

وضعت 3 اعطاني 2

مش عارفة شو بصير.....

post-236446-082987700 1290098620_thumb.j

المرفقات
c++.jpg
#12
اقتباس
اخي طلع البرنامج ما بطبع المتسلسلة صح

المشكلة تكمن في عدم فهمك للمتتالية أصلا و إلا لما اعترضتي ! :)

اقتباس
انا وضعت 5 اعطاني 5

وضعت 3 اعطاني 2

هكذا هي النتائج الصحيحة :happy:

شوفي معي .. شكل المتتالية يكون هكذا :

U0 = 0, U1 = 1
U2 = U0 + U1 = 0 + 1 = 1
U3 = U1 + U2 = 1 + 1 = 2
U4 = U2 + U3 = 1 + 2 = 3
U5 = U3 + U4 = 3 + 2 = 5
و هكذا دواليك ....

أتمنى ان تكون الفكرة واضحة :) و أي استشكال . .أنا في الخدمة :)

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 18 نوفمبر 2010 في 20:07

#13

مرحبا اخي

طبقت المتسلسلة وطلع هكذا معي....

ادخلت 0 اعطاني 0

ادخلت 1 اعطاني 1

ادخلت 2 اعطاني 1

ادخات 3 اعطاني 2

ادخات 5 اعطاني 5

الحل لهون صح والباقي غير شكل...

ادخلت 8 اعطاني 21

ادخلت 13 اعطاني 233

ادخلت 21 اعطاني 10946

ادخلت 34 اعطاني 5702887

ادخلت 55 اعطاني 2144908973

ادخلت 89 اعطاني 511172301

انت قلت

اقتباس
أي أن الحد الحالي يساوي مجموع الحدود التي قبله
#14
اقتباس
الحل لهون صح والباقي غير شكل...

أعود من جديد لأكرر أن المشكلة مازالت تكمن في فهمك للمتتالية لا غير ! :)

شوفي معي :

U0 = 0, U1 = 1
U2 = U0 + U1 = 0 + 1 = 1
U3 = U1 + U2 = 1 + 1 = 2
U4 = U2 + U3 = 1 + 2 = 3
U5 = U3 + U4 = 3 + 2 = 5
U6 = U4 + U5 = 3 + 5 = 8
U7 = U5 + U6 = 5+ 8 = 13
U8 = U6 + U7 = 8 + 13 = 21
U9 = U7+ U8 = 13 + 21 = 44
U10 = U8 + U9 = 21 + 44 = 55 
و هكذا دواليك ....

و هذه هي النتائج التي حصلت عليها و هي سليمة :)

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 19 نوفمبر 2010 في 02:52

#15

مرحبا اخي

انا الحمدالله فهمت كيف حليتها بس

اقتباس

U0 = 0, U1 = 1

U2 = U0 + U1 = 0 + 1 = 1

U3 = U1 + U2 = 1 + 1 = 2

U4 = U2 + U3 = 1 + 2 = 3

U5 = U3 + U4 = 3 + 2 = 5

U6 = U4 + U5 = 3 + 5 = 8

U7 = U5 + U6 = 5+ 8 = 13

U8 = U6 + U7 = 8 + 13 = 21

U9 = U7+ U8 = 13 + 21 = 44

U10 = U8 + U9 = 21 + 44 = 55

و هكذا دواليك ....

بس اريد ان تشرح لي بالتفصيل سطر سطر بالحل (كيف بطلع الجواب)....بالكلام يعني...

اقتباس
0 + 1 = 1

1 + 1 = 2

1 + 2 = 3

3 + 2 = 5

3 + 5 = 8

5+ 8 = 13

8 + 13 = 21

13 + 21 = 44

21 + 44 = 55

بس اذا ما فيها غلبه........

تم تعديل هذه المشاركة بواسطة angel20 في 19 نوفمبر 2010 في 13:47

#16

السلام عليكم و رحمة الله و بركاته

سأشرح من بداية الكود و حتى آخر سطر :)

في هذا السطر :

#include<iostream.h>

قمنا بالإعلان عن المكتبة iostream.h و هي نسخة قديمة من المكتبة iostream حيث تعتمد الأخيرة على مساحة الأسماء std أما الأولى فتُعتبر طريقة التضمين القديمة لمكتبات السي++.

في هذا السطر :

int main()

توجد الدالة الرئيسية الـ main التي يبدأ منها تنفيذ البرنامج و التي تستقبل معاملين, الأول هو argc و هو اختصار لـ argument count و هو مُعرف على شكل متغير من نوع الأعداد الصحيحة, هذا الوسيط يُخزن فيه عدد وسائط البرنامج التي تم إدخالها و تكون قيمة هذا المتغير 1 و هي لإسم البرنامج. الوسيط الثاني يُمكننا من رؤية تلك الوسائط, أي القيم التي بها و اسمه argv وهو اختصار لـ argument vector حيث يكون عبارة عن مصفوفات .. كل مصفوفة تأخذ وسيط.

للتسهيل على المبتدئين .. يُمكنهام استخدام هذه الكتابة :

int main()

حت يكون بإمكانهم فهم وسائط الدالة الرئيسية و التعامل معها.

بعد أن فتحنا معكوفا (هكذا {) للدالة الرئيسية, قُمنا بالإعلان عن المتغيرات التي سنستخدمها في البرنامج (لاحظي أننا أسندنا قيم ابتدائية للمتغيرين U0 و U1 اللذيْن يُمثلان الحد الأول و الثاني للمتالية) :

بعد ذلك أظهرنا الجلمة :

 n =

لنلفت انتباه المستخدم بضرورة إدخال عدد صحيح من أجل رؤية قيمة الحد المقابل له حسب المتتالية المذكورة أعلاه ثم قُمنا بتخزين القيمة المُدخلة في المتغير n.

الآن نأتي إلى فحص القيمة المُدخلة .. هل هي موحبة أم سالبة, إذا كانت القيمة موجبة فسيحدث فحص آخر عن ما إذا كانت تساوي 0 أو 1 و في هذه الحالة سيتم إظهار إحدى القيمتين U0 أو U1 بدون حساب سابق لأنهما مُعرفتان مُسبقا. أما إذا كانت القيمة أكبر أو تساوي 2 فسنقوم بحساب القيمة Un حسب شكل المتتالية, سـأوضح الطريقة في آخر المشاركة.

هذا السطر :

int U0 = 0,U1 = 1,Un,n,i;

يعني أن القيمة المُدخلة سالبة و عندها سيتم إظهار الرسالة :

erreur ! le nombre n doit être supérieur ou égal zéro.

و معناها بالعربية هو :

حدث خطأ, الرقم الُدخل يجب أن يكون موجبا أو معدوما.

و السبب في ذلك هو ان المتتالية غير معرفة على الأعداد السالبة, لاحظي أن تعريف المتتالية يبدأ من 0 فما فوق ...

عودا على بدء .. و بالتحديد إلى هذا المقطع :

for(i = 2;i <= n;i++)
          {
                Un = U0 + U1;
                U0 = U1;
                U1 = Un;
          }
          cout<<"U"<<n<<" = "<<Un<<"\n";

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

بافتراض أن n = 4 , ستمر الحلقة بالخطوات التالية :

i = 2 و 2 <= 4, بما أن الشرط محقق فسيتنقل التنفيذ إلى داخل الحلقة :

Un = U0 + U1 = 0 + 1

U0 = U1 = 1

U1 = Un = 1

تتم الآن زيادة i بواحد ليصبح 3 ثم نتحقق مجددا من الشرط : هل

3 <= 4 !؟

نعم, إذن نعيد الكرة من جديد :

Un = U0 + U1 = 1 + 1 = 2

U0 = U1 = 1

U1 = Un = 2

مرة أخرى .. تتم زيادة i بواحد ليصبح 4 و نعود إلى الشرط لنتحقق منه : هل

4 <= 4 !؟

نعم, إذن .. ننفذ أوامر الحلقة مجددا :

Un = U0 + U1 = 1 + 2 = 3

U0 = 1

U1 = 3

نزيد i بواحد ليصبح 5 و نتحقق من الشرط : هل

5 <= 4 !؟

لا, إذن نخرج من الحلقة لنطبع قيمة Un من خلال هذا السطر :

cout<<"erreur !\a le nombre n doit être supérieur ou égal zéro\n";

فتخرج :

Un = 4

أرجو أن يكون الشرح واصح :)

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…