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

في مشكلة ببرنامج المساحات

مغلق
بدأه princess-amorah في 23 مارس 2006 · 10 رد · 612 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عملت البرنامج بس الاستازة طالبتوو بالفنكشن حاولت اعملوو زي مافهمت الفنكشن لكن بيطبع ارقام غييييييير

#include<stdio.h>
#define d 3.14
float circle(float r,float s);
int squar(int m,int s);
float rectingle(float r1,float r2,float s);
float tringle(float q,float h,float s);

void main()
{
	int x;
	printf("1-circle\n2-squar\n3-rectingle\n4-tringle\n5-exit\n");
	printf("select your choise:");
	scanf("%d",&x);
	printf("* * * *\n");
    


	switch(x)
	{
	case 1:
  {
  	float s,r;
  	printf("add r:");
        	scanf("%f",&r);
  	printf("%f\n",s);
  	circle(r,s);
  	printf("* * * *\n");

  }

	case 2:
  {
  	int m,s;
  	printf("add m:");
        	scanf("%d",&m);
  	printf("%d\n",s);
  	squar(m,s);
  	printf("* * * *\n");
     

  }

	case 3:
  {
  	float r1,r2,s;
  	printf("add r1:");
        	scanf("%f",&r1);
  	printf("add r2:");
        	scanf("%f",&r2);
  	printf("%f\n",s);
  	rectingle(r1,r2,s);
  	printf("* * * *\n");

  }

	case 4:
  {
  	float q,h,s;
  	printf("add q:");
        	scanf("%f",&q);
  	printf("add h:");
        	scanf("%f",&h);
  	printf("%f\n",s);
      tringle(q,h,s);
  	printf("* * * *\n");

  }
	case 5:
  {
  	
  	printf("bay bay\n");
        

  }


	}


}


float circle(float r,float s)
{

	s=d*r*r;

  return s;	
}
int squar(int m,int s)
{

	s=m*m;

  return s;	
}
float rectingle(float r1,float r2,float s)
{

	s=(0.5*(r1*r2));

  return s;	
}
float tringle(float q,float h,float s)
{

	s=(0.5*(q*h));

  return s;	
}

وعندي سؤال تاني مابدي البرنامج بس بدي افهم شو هوا perfect number

وياريت بس مثال ليه (مش برنامج)

تم تعديل هذه المشاركة بواسطة princess-amorah في 23 مارس 2006 في 10:47

#2

perfect number هي ارقام صحيحة تتوفّر فيها الصفة التالية :

مجموع الآرقام التي يقسم عليها دون باق = العدد نفسه.

مثلاً :

6 ما هي الأرقام التي نقسم 6 عليها ولا تعطينا باق؟(باستثناء الرقم نفسه)

1 و 2 و 3

1 + 2 + 3 = 6

اذن مجموع الآرقام التي يقسم عليها 6 دون باق = 6

اذن 6 رقم perfect number

مثال آخر 28 = 1 + 2 + 4 + 7 + 14

قواسم الـ 28 هنّ : 1 ,2 ،4 ،7 ،14

ومجموعهن : 28

اذن 28 هو perfect number

#3

كلامك دقيق مية بالمية استاذي ;)

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#4

float circle(float r,float s) //no need to pass s, u can just say return (d*r*r), and what is d, you did not pass it to the function

{

s=d*r*r;

return s;

}

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#5

اسف لم ارى #define d 3.14

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#6

شكرً اسماعيل ابراهيم ع الشرح الوافي بجد ززز :rolleyes:

سوبر عماااد اوكى بس كلوو بيطلع عندي النوتاج غلط

#7

princess-amorah

هناك الكثير من الأخطاء...

أنا ليس لدي وقت لكنني مررت مثلا على أول دالة (الدائرة) ووجدت:

float circle(float r,float s)
{

s=d*r*r;

 return s; 
}

لماذا s هو برامتر للدالة رغم انه لا توجد قيمة يتم تمريرها له؟! حسن ربما خطأ منطقي! لا يؤدي الى الخطأ الذي تعاني منه!

حسن في الدالة الأصلية قمت بطباعة قيمة s ؟؟ وكانت صفر... عليك مراجعة درس مجال نعريف المتغير، s التي في دالة main لم تتغير وبقيت صفر لأنها ببساطة ليست نفس الـ s التي في الدالة أعلاه ... لتمرير القيمة المرجعة الى s يجب :

s=circle(r);

ولا داعي للـ

float circle(float r,float s)

بل

float circle(float r)

لأننا نمرر للدالة فقط قيمة الراديوس.

هكذا ستعمل الدالة.

هذه الدالة التي سمح لي الوقت برؤيتها لكن هناك أخطاء بارزة أخرى لفتت انتباهي:

عند استعمال الجملة switch يجب أن نفصل بين كل case بكلمة break.

لأن البرنامج في الحلات العادية اذا تحقق اي case فإنه ينفّذه ويكمل لينفذ كل الشروط التي تليه حتى لو لم تتحقق جمل case

لهذا يجب أن نضع بعد نهاية كل جملة case كلمة break أي اوقف الحلقة..(أوقف جملة سويتش).

الكود التالي وضعت فيه تصحيح دالة الدائرة ووضعت break كما مشروح.

#include<stdio.h>
#define d 3.14
float circle(float r/*,float s*/);
int squar(int m,int s);
float rectingle(float r1,float r2,float s);
float tringle(float q,float h,float s);

void main()
{
int x;
printf("1-circle\n2-squar\n3-rectingle\n4-tringle\n5-exit\n");
printf("select your choise:");
scanf("%d",&x);
printf("* * * *\n");



switch(x)
{
case 1:
 {
  float s,r;
  printf("add r:");
  scanf("%f",&r);
  printf("%f\n",r);
s=circle(r);
  printf("%f\n",s);

 }       break;

case 2:
 {
  int m,s;
  printf("add m:");
  scanf("%d",&m);
  printf("%d\n",s);
  squar(m,s);
  printf("* * * *\n");


 }             break;

case 3:
 {
  float r1,r2,s;
  printf("add r1:");
	scanf("%f",&r1);
  printf("add r2:");
	scanf("%f",&r2);
  printf("%f\n",s);
  rectingle(r1,r2,s);
  printf("* * * *\n");

 }                   break;

case 4:
 {
  float q,h,s;
  printf("add q:");
	scanf("%f",&q);
  printf("add h:");
	scanf("%f",&h);
  printf("%f\n",s);
     tringle(q,h,s);
  printf("* * * *\n");

 }                         break;
case 5:
 {

  printf("bay bay\n");


 }


}


}


float circle(float r/*,float s*/)
{

return d*r*r;
//you can alse said: float s=d*r*r; return s;  
}

int squar(int m,int s)
{

s=m*m;

 return s;
}
float rectingle(float r1,float r2,float s)
{

s=(0.5*(r1*r2));

 return s;
}
float tringle(float q,float h,float s)
{

s=(0.5*(q*h));

 return s;
}

شيء مهم : تسمية المتغيرات هكذا a، r ،v ،s ،d، g،f يجعل البرنامج غامض نصيحة ان تسمي المتغيرات باسماء ذات معنى حتى أفهم أنا وغيري ماذا تقصد مثلا : Radius Total Area

وشكرًا لحسن الاستماع :)

#8

شكرن اسماعيل ابراهيم

شكرن كتيييييييير ... واللهي داه اول هووم وورك لينا وليا بس 3 محاضرات اخده الفانكشن ولسه حايسه فيها

بس شكرن بجد

#9
#include<stdio.h>
#define d 3.14
float circle(float r,float s);
int squar(int m,int s);
float rectingle(float r1,float r2,float s);
float tringle(float q,float h,float s);

void main()
{
	int x,w;
	printf("%c CalCulAte the Area For %c \n1-circle %c\n2-squar %c\n3-rectingle %c\n4-tringle %c\n5-exit %c\n\n",w=1,w=1,w=3,w=3,w=3,w=3,w=3);
    char i=3;
	for(int k=1;k<=4;k++)
	{
    printf("%c \t",i);
	}
	printf("\n");
	do{
	printf("select your choise:");
	scanf("%d",&x);
    
	printf("* * * *\n");

	switch(x)
	{
	case 1:
  {
 	 float sum,r,s;
            printf("add r %c:",i=3);
            scanf("%f",&r);
            sum=circle(r,s);
            printf("%f\n",sum);
 	 break;

  }

	case 2:
  {
 	 int m,sum,s;
 	 printf("add m %c:",i=3);
       	 scanf("%d",&m);
 	 sum=squar(m,s);
 	 printf("%d\n",sum);
 	 printf("* * * *\n");
         break;

  }

	case 3:
  {
 	 float r1,r2,sum,s;
 	 printf("add r1 %c:",i=3);
       	 scanf("%f",&r1);
 	 printf("add r2  %c:",i=3);
       	 scanf("%f",&r2);
 	 sum=rectingle(r1,r2,s);
 	 printf("%f\n",sum);
 	 printf("* * * *\n");
            break;
  }

	case 4:
  {
 	 float q,h,s,sum;
 	 printf("add q %c:",i=3);
       	 scanf("%f",&q);
 	 printf("add h %c:",i=3);
       	 scanf("%f",&h);
 	 sum=tringle(q,h,s);
 	 printf("%f\n",sum);
 	 printf("* * * *\n");
            break;
  }
	case 5:
	{
  
 	 printf("%c bay bay %c\n",i=1,i=2);
 	 break;
        

  }
	}

	}while(x<5);




}


float circle(float r,float s)
{

	s=d*r*r; 
	return s;	
}
int squar(int m,int s)
{

     s=m*m;

  return s;	
}
float rectingle(float r1,float r2,float s)
{

	s=(0.5*(r1*r2));

  return s;	
}
float tringle(float q,float h,float s)
{

	s=(0.5*(q*h));

  return s;	
}

خلاص عملتو وطلع تمام شكرن كتييييييييير ..

#10

يسعدني ان كلامي كان واضح، لأنني كتبته على عجل (يعني مشتعجل مش كتبته على عجل سيارة :) )

المهم لا يجب أن ترسل s الى الدالة ، ولا يجب أن تعرف s في تعريف الدالة.(لأنك ترسل للدالة الراديوسr وترسل لها s الذي هو متغير غارغ (أو يحوي معرلومات عشوائية)

انت تريد استخدام شيء اسمه s داخل الدالة عرّفه داخل الدالة :

float circle(float r)
{
float s;//هذا متغير داخل الدالة ولا يمكن للأوامر خارج الدالة رؤيته. نستعمله داخل الدالة
s=d*r*r; 
return s; 
}
{

وكذلك نستدعي الدالة هكذا:

sum=circle(r);

وبهذا يحمل sum القيمة التي ترجعها لنا الدالة. وهي قيمة s داخل تلك الدالة.

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 24 مارس 2006 في 14:23

#11

:P شكرن برضووو مع انه الي عملتووو اشتغل تمام

راح برضوو اعمل تبعك

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

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

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

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

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

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