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

تمرين وحلّ ... للتمرّن على لغة سي(أو سي++).

مغلق
بدأه إسماعيل ابراهيم في 15 مارس 2003 · 16 رد · 1,914 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذه مجموعة من التمارين مع الحلول وهي ليست نهائية سنضيف اليها ما يستجد بإذن الله, والهدف من هذه المجموعة هو زيادة القدرات البرمجيّة لدى الدارس.

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

سين وجيم:

انواع المتغيرات والأوامر البسيطة

مستوى بسيط:

1. معطى رقمين a=2,b=5 , بشكل عام لكي نقوم بتبديل قيم المتغيرين فيما بينهما, نحتاج الى متغيّر مساعد بالشكل التالي:

Temp=a;

a=b;

b=temp;

قم بتبدي القيم لكن دون استخدام المتغير المساعد...

الجواب:

#include <stdio.h>

void main ( )

{

	int a = 5 , b = 2;

	a += b;

	b = a - b;

	a -= b;

	printf ( "a = %d  b = %d" , a , b );

}

الحل بطريقة أخرى:

#include <stdio.h>

void main ( )

 {

	int a = 5 , b = 2;

	a ^= b;

	b ^= a;

	a ^= b;

	printf ( "a = %d  b = %d" , a , b );

}

2. القد مرّ منذ بداية اليوم k ثوانٍ .. ما هي الساعة الان بالضبط... مثلا : k=49635 الساعة ستكون : 13:47:15 .. أكتب برنامج يقرأ من المستخدم k ويطبع له الساعة الحالية (حسب ال k ).

#include <stdio.h>	

void main()

{

	long time;

	int hour, minute, second;

	printf ( "PUT TIME ( seconds )" );

	scanf ( "%ld" , & time );



	hour = time / 3600;

	time %= 3600;

	minute = time / 60;

	second = time % 60;

	printf ( "TIME = %d : %d : %d" , hour , minute , second );

}

3. بواسطة الامر switch أكتب آلة حاسبة تقوم بالعمليات التالية : "+" , "-" ,"*" , "/".

على أن يقوم المستخدم بطباعة رقمين بينهما الاشارة, والبرنامج يعطي نتيجة العملية, مثلا :

الدخل : 1+9 الخرج 10.

الحل:

void main()

{

	int firstNumber, secondNumber;

	char sign;



	printf ( "PUT:  NUMBER SIGN NUMBER ( for example : 13 + 24 )n" );

	scanf ( "%d%c%d" , & firstNumber, & sign , & secondNumber );



	printf ( "%d %c %d = " , firstNumber, sign, secondNumber );

	switch ( sign ) {

  case '+' : printf ( "%dn" , firstNumber + secondNumber );

      break;

  case '-' : printf ( "%dn" , firstNumber - secondNumber );

      break;

  case '*' : printf ( "%dn" , firstNumber * secondNumber );

      break;

  case '/' : printf ( "%fn" , ( float ) firstNumber / secondNumber );

	}

}

تمارين بلا حلول في موضوع انواع المتغيرات والأوامر البسيطة

1. لديك رقم عدد حقيقي float a قم بنسخ القسم الصحيح من الرقم (الذي على يسار النقطة) في متغير int b وانسخ القسم الكسري (الذي عن يمين النقطة) الى المتغيّر float c , مثلا :

a=12.601

c=0.601

.b=12

2. إحسب الباقي من عملية قسمة a على b لكن دون استخدام الامر % .

3. معطى عدد ثلاثي الخانة (مكون من 3 خانات), أكتب برنامج يعطيك مجموع الخانات. مثلا : الرقم :157

النتيجة تكون 13 .

الحلقات loops

مستوى بسيط:

1.أكتب برنامج يحصل من المستخدم على رقم a (0

مثلا لو أن a =5 سنحصل على : 14 23 32 41 50 .

الحل:

#include <stdio.h>

void main()

{

	int a = 0 , i;



	while ( a < 1 || a > 18 ) {

  printf ( "PUT NUMBER [ 1 .. 18 ]n" );

  scanf ( "%d" , & a );

	}



	for ( i = 10; i < 100; i ++ )

  if ( i / 10 + i % 10 == a )

 	 printf ( "%d  " , i );

}

2. متوالية fiboncci وهي تبدو كالتالي:

a1=1,a2=1 , an=a(n-1) +a(n-2) .. (n>2)[/ALIGN]

أي من العضوالثلث فصاعدا العضو يساوي مجموع العضوين السابقين. هكذا:

1 , 1 , 2 , 3 , 5 , 8 , 13 .

أكتب برنامج يقوم بطباعة أول 10 أعضاء في هذه المتوالية.

الحل:

مستوى متقدّم :

1. معطى رقمين double a و int precision .

قم بعمليّة تقريب للعد a بدقّة precision ارقام بعد النقطة , مثلا:

a = 124.21429 و precision =4 النتيجة ستكون 124.2143 .

2. palindrome هو رقم أو كلمة اذا قرأناه من اليمين , ومن اليسار نحصل على نفس القرائة: مثلا:

1234321 أو abcdcba , معطى رقم موجب من نوع long إفحص هل هو palindrome .

الحل:

3. إحسب مجموع 1!+2!+………….+10!

الحل:

حل آخر:

4. معطى رقم صحيح موجب.. حلله الى عوامل أولية مثلا: 180=2*2*3*3*5

الحل:

5. معطى رقم صحيح موجب long كم خانة مختلفة يوجد فيه:

مثلا: 4243406684 الخرج يكون :

6 different digits

0 2 3 4 6 8 .

الحل:

يكفي لهذه المشاركة , وسنكمل في مشاركات قادمة.... للإستفسار يمكنكم الكتابة في هذا الموضوع...

#2

السلام عليكم..

اشكرك يااخي على هذة التمارين الممتازة

لدي استفسار: الرمز ^ كيف يستخدم في السي انا اعرف انة في الباسكال يستخدم في المؤشرات لكن في السي لا ادري

اخوك مبتدى جدا في السي:'(:'(

#3

(f)إسماعيل ابراهيم

الله يجزاك خير على جهدك المبذوووووول (gift)

لكن سؤالي :confused:

كما ذكر الاخ KAZEMEE

ماذا تعني ( ^ )

مع اني اخمن فائدتها لكن نريد الجواب.

تحياتي (f)

#4

شكراً الى أخي إسماعيل على هالتمارين

اقتباس
ماذا تعني ( ^ )

مع اني اخمن فائدتها لكن نريد الجواب.

:D أنا كنت اعرفها بس النسيان

وتقرين هل معامله ما تستخدم اكثير

وشكراً(f)

If you think yourself that you are nobody, you should go somewhere to find yourself

#5

أظن أنها بعملية ضرب للعدد نفسه كما هو في الmaple

ربما !!!:o

#6

على كل مبادرة و تمارين تذكرنا بأيام زمان !!!!!

شكر للأخ إسماعيل ابراهيم

--------------------(f)(f)(f)(f)(f)(f)(f)(f)(f)(f)(f)(f)-----------------

#7

ما رأيك بالإجابة التالية :

%- +سؤال 1 + -%

و أرجوكم أريد أن أعرف ارائكم و إن كانت ناقدة

شكرا.........;););)

untitled.txt

#8

هيا يا شباب!!! وينكم ......:o

#9

شكرا على التفاعل.... أرجو ان تكون التمارين مفيدة...

----------------

بالنسبة للـ ^ فهي تعني XOR ! : انتم بالطبع تعرفون and و or وهي بوابات منطقيّة, Xor (^) هي ايضا بوابة منطقيّة... تعرفون أن البوابة المنطقية & تعطينا 1 اذا كان ما قبلها 1 وما بعدها 1 (1&1--->1).. وأن البوابة | تعطينا واحد فقط اذا كان قبلها أو بعدها أو الاثنين معا يساويان 1 (1|0------->1). فإن البوابة ^ تعطينا 1 اذا كان ما قبلها يختلف عما بعدها..(0^1 ------>1) (1^1 --->0).

اذا لم يكن الشرح واضحا فسأوضح أكثر فقط إسألوا.

----------------------------------------------------------------------------------

أخ kessabiriadh إذا قمت بالحل بدون النظر الى الحل الموجود فأقول لك أن حلّك صحيح.. وهو تماما كالحل الاول... انظر اليه :).

#10

بالنسبة ل(^) فالأمر قد صار واضحا

و الله يوفق كل عضو في إيجاد الحلول

تشكر يا عم إسماعيل ابراهيم : مشرف منتدى السي ++

;) :D (f) (gift) ;)

#11

لو سمحت ممكن اتعيد الحل لكن بلغة ++C؟؟؟اذا ما كان فيها ازعاج لاني بصراحة ما اعرف افرق بين Cو++C :o

#12

أخت عيناوية.. 1) التركيز هنا في الحلول هو على الفكرة..ويمكن لأي شخص تطبيق الفكرة على أي لغة برمجة..

2) لا يوجد في هذه الحلول شيء يجب تغيره ليتحول البرنامج الى سي++ , سوى :

#include <stdio.h>

تتحول الى

#include  [code]

ثم :

printf الى cout و scanf الى cin ...مع مراعات ما ينجرّ خلف هذا من تغييرات.

#13

السلام عليكم..

الاخ أسماعيل هل يمكن حل متوالية fiboncci بواسطة التداخل recursion

لان موضوع التداخل ما فهمت اصلا ويش الفائدة منة

وشكر لك(gift)(gift)

#14

يمكن حل السؤال بواسطة التعاودية recursion,بهذه الطريقة :

 

int fibonachi(int n)

{

    if(n==0||n==1)

return 1;

   else

       return(fibonachi(n-1)+fibonachi(n-2) );

}

---------------

طبعا تقوم باستدعاء هذه الدالة من خلال حلقة بهذا الشكل:

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

printf("%d ",fibonachi(i));
#15
#include<stdio.h>

void main()

  {

int a,b;

scanf("%d%d",&a,&b);

printf("a=%d b=%dn",a,b);

a*=b;b=a/b;a=a/b;

printf("a=%d b=%dn",a,b);

}
#16

حل جميل أخي raidan... وفكرة حلوة.. وهي تشابه الفكرة المطروحة في الحل الاول, لكن بدل ال + يوجد * وبدل ال - يوجد / :) ...

أشكرك على هذا الحل ....(f)(f)

#17

السلام عليكم

لا شكر على واجب اخي اسماعيل

انا اردت من خلا ل هذا التمرين ان يكون الرقم حسب الادخال ليس فقط التحويل بين رقمين محددين

هذا الموضوع مغلق.

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