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

مشكلة في كود به tableau و fonction

مغلقمُجاب
بدأه hicham@com في 1 مارس 2014 · 2 رد · 562 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

عندي مشكله في هذا الكود حيث المفروض ان يتم ادخال ارقام في جدول ثم ادخال قوة فيخلق جدول اخر به ارقام الجدول الاول بالقوة المعطاة، لكن يجب حساب القوة دون استعمال الامر pow

#include<stdio.h>#include<stdlib.h>main(){    int i,t,n1,p1;    int puissance(int x,int n,int p)    	{ int va;    		if(n>0) va=n;    		else va=-n;    		p=1;    		for(i=1;i<=va;i++)    			p=p*x;    		if(n<0) p=1/p;    		return p;    	}	    printf("donner la taille du tableau:\t");    scanf("%d",&t);    float T1[t],T2[t]; //déclatation des tableaux	for (i=0;i<t;i++)    {        printf("donner un reel:\t");        scanf("%f",&T1);    }    printf("donner la puissance:\t");    scanf("%d",&n1);    for(i=0;i<t;i++)    {    	T2=puissance(T1,n1,T2);    	printf("%f\t",T2);    }return 0;system("pause");}

UFoGC.jpg

 

كما تلاحظون في الصورة الجدول به 3 خانات لكن في النتيحه اعطانا فقط واحده مع انو باستعمال pow بنفس الكود هذه هي النتيجه

 

OyNib.jpg

#2 أفضل إجابة

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

اتعلم ان مكتن الخطأ في مكان صغيييير لكنه مهم جدا، مكان الخطأ يكمن في عدم تعريفك للمتغير i في الدالة puissance 

قد تقول لماذا؟ لقد عرفته فوقها في الدالة الرئيسية main لا يجب تكرار ذلك؟، لكن بما انك عرفت i في وسط الدالة main فهذا يعتبر متغيرا خاصا بها و لا يعمل في وسط بقية الدوال لان هذا التعريف يسمى تعريفا خاصا

سابين لك ذلك من خلال الكود الخاص بك 

#include<stdio.h>#include<stdlib.h>main(){    int i=1,t,n1,p1;        int puissance(int x,int n)    	{    	    int va,p;    	    printf("la valeur de i dans la fonction puissance %d\n",i);// ستظهر بعد تنفيذ الدالة    		if(n>0) va=n;    		else va=-n;    		p=1;    		for(i=1;i<=va;i++)    			p=p*x;    		if(n<0) p=1/p;    		return p;    	}    printf("la valeur de i dans la fonction main %d\n",i);// ستظهر تماما عند تشغيل البرنامج    printf("donner la taille du tableau:\t");    scanf("%d",&t);    float T1[t],T2[t]; //déclatation des tableaux	for (i=0;i<t;i++)    {        printf("donner un reel:\t");        scanf("%f",&T1);    }    printf("donner la puissance:\t");    scanf("%d",&n1);    for(i=0;i<t;i++)    {    	T2=puissance(T1,n1);    	printf("%f\t",T2);    }return 0;system("pause");}

الامر بسيط اسندت قيمة 1 للمتغير i و هو معرف في الدالة main فقط و طبعته في كلا الدالتين و النتيجة هي كما الاتي

 

3P5Qu.jpg

 

و الان لنقم بتغييرنا الصغير و نعرف i في وسط الدالة puissance و نسند له قيمة اخرى في وسطها و لنرى النتيجة

#include<stdio.h>#include<stdlib.h>main(){    int i=1,t,n1,p1;        int puissance(int x,int n)    	{    	    int i=5,va,p;// i اسندت قيمة 5 للمتغير     	    printf("la valeur de i dans la fonction puissance %d\n",i);// ستظهر بعد تنفيذ الدالة    		if(n>0) va=n;    		else va=-n;    		p=1;    		for(i=1;i<=va;i++)    			p=p*x;    		if(n<0) p=1/p;    		return p;    	}    printf("la valeur de i dans la fonction main %d\n",i);// ستظهر تماما عند تشغيل البرنامج    printf("donner la taille du tableau:\t");    scanf("%d",&t);    float T1[t],T2[t]; //déclatation des tableaux	for (i=0;i<t;i++)    {        printf("donner un reel:\t");        scanf("%f",&T1);    }    printf("donner la puissance:\t");    scanf("%d",&n1);    for(i=0;i<t;i++)    {    	T2=puissance(T1,n1);    	printf("%f\t",T2);    }return 0;system("pause");}

ما قمت به هو اسناد 5 ل i في الدالة puissance و 1 في الدالة main و النتيجة كما الاتي

 

D4ijF.jpg

 

كما ترى فقد حسبت القوى و طبع الجدول الثاني و الاهم هو ان قيمة i في الدالة  puissance  مختلفة عن قيمتها في الدالة main و هذا هو الهدف الذي نرجوه 

و الان الى الكود بعد تعديله 

#include<stdio.h>#include<stdlib.h>main(){    int i,t,n1,p1;        int puissance(int x,int n)    	{    	    int i,va,p;     		if(n>0) va=n;    		else va=-n;    		p=1;    		for(i=1;i<=va;i++)    			p=p*x;    		if(n<0) p=1/p;    		return p;    	}    printf("donner la taille du tableau:\t");    scanf("%d",&t);    float T1[t],T2[t]; //déclatation des tableaux	for (i=0;i<t;i++)    {        printf("donner un reel:\t");        scanf("%f",&T1);    }    printf("donner la puissance:\t");    scanf("%d",&n1);    for(i=0;i<t;i++)    {    	T2=puissance(T1,n1);    	printf("%f\t",T2);    }return 0;system("pause");}

و النتيجة هي كالاتي 

 

qA6aU.jpg

 

جيدة و ممتازة في هذه الحالة فقط ....

اما عن الحالة السالبة فهي لا تعمل انظر الى النتيجة بعد تطبيق الكود الخاص بك و تعريف i في وسط puissance 

 

bMDmw.jpg

 

النتيجة خاطئة فالمفترض ان تكون

1

0,25

0,111111

اذن عليك ان تتنتبه و تصحح الخطأ في الحالة السالبة 

بالتوفيق لك و ارجو ان اكون قد افدتك و لو قليلا  ^_^

تم تعديل هذه المشاركة بواسطة tantie L في 1 مارس 2014 في 14:44

1

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#3

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


 


بارك الله فيكي اختي الكريمه، قد عدلت في البرنامج حسب نصائحك القيمة و بصدد تعديل مشكلة القوة السالبة


شكرا


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

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

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

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

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

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