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

كيفية رسم دالة ومشتقتها ؟؟

مغلق
بدأه BiSoN في 27 ديسمبر 2005 · 21 رد · 1,640 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أسعد الله اوقاتكم بكل خير وبركه ...

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

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

استخدمت هذا الكود لرسم الداله عن طريق وضع علامة * في اماكن محدده عن طريق for loop ....

#include<stdio.h>
#define MAX 55  
int f(int t);
main (void)
{
char plot[MAX +2];  
int i, t, funval;
for( i = -15; i <= MAX; i += 5 )
	printf("%5d", i );
printf("\n");
for( i = -15; i <= MAX; i += 5 )
	printf("    |", i );
printf("\n");
for( i = -15; i <= MAX + 1; ++i )
	plot = ' ';
for( t = 0; t <= 9; ++t )
{
	funval = f(t);
	plot[funval] = '*';
	plot[funval + 1] = '\0';
	printf("t=%2d               %s\n", t, plot);
	plot[funval] = ' ';
	plot[funval + 1] = ' ';
}
   return (0);
}
int f (int t)
{
	return ( t * t - 4 * t + 5 );
}

وهذا هو الناتج

27_12_05_09_51_27_11357058871.JPG

إلى هنا لا يوجد اي مشكله ...

============================================

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

#include<stdio.h>
#define MAX 55  
int f(int t);
main (void)
{
char plot[MAX +2];  
int i, t, funval;
for( i = -15; i <= MAX; i += 5 )
	printf("%5d", i );
printf("\n");
for( i = -15; i <= MAX; i += 5 )
	printf("    |", i );
printf("\n");
for( i = -15; i <= MAX + 1; ++i )
	plot = ' ';
for( t = 0; t <= 9; ++t )
{
	funval = f(t);
	plot[funval] = '*';
	plot[funval + 1] = '\0';
	printf("t=%2d               %s\n", t, plot);
	plot[funval] = ' ';
	plot[funval + 1] = ' ';
}
   return (0);
}
int f (int t)
{
	return ( 2 * t - 4 );
}

فظهر الناتج هكذا مع تداخل بعض الاحرف العربيه لا اعرف كيف اتت ؟؟؟ ..

27_12_05_09_22_03_1135704123wrongder.JPG

وانا اريد ان يظهر الناتج هكذا لان اماكن النقاط عند حسابها نفس الاماكن المحدده في الرسم التالي ..

27_12_05_09_55_06_1135706106rrr.JPG

========================================================================

ولو فرضنا انني اريد عمل كود يقوم برسم اي داله يريدها المستخدم ,, سوف يطلب البرنامج عند تشغيله من المستخدم ادخل العوامل للداله ( أ س2 + ب س + ج ) اي سوف يطلب من المستخدم ادخال االارقام التاليه أ ، ب ، ج ..... ورمزت لها في الكود التالي بالاحرف a b c بالتوالي ... ولكن عند تشغيل الكود لم يعمل البرنامج كما اريد ويقول يوجد اخطاء ؟؟؟؟ فما هو السبب ؟؟؟

#include<stdio.h
#define MAX 55  
int f(int t);
main (void)
{
char plot[MAX +2];   
int a, b, c, i, t, funval;
printf(" Enter the coffiecent of the funcyion:");
scanf("%d%d%d", &a, &b, &c);
for( i = -15; i <= MAX; i += 5 )
	printf("%5d", i );
printf("\n");
for( i = -15; i <= MAX; i += 5 )
	printf("    |", i );
printf("\n");
for( i = -15; i <= MAX + 1; ++i )
	plot = ' ';
for( t = 0; t <= 9; ++t )
{
	funval = f(t);
	plot[funval] = '*';
	plot[funval + 1] = '\0';
	printf("t=%2d               %s\n", t, plot);
	plot[funval] = ' ';
	plot[funval + 1] = ' ';
}
   return (0);
}
int f (int t)
{
	return ( a * t * t + b * t + c);
}

ولكم خالص تحياتي ؟؟

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

تم تعديل هذه المشاركة بواسطة BiSoN في 27 ديسمبر 2005 في 20:57

#2

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

هل جربت تتبع الكود خطوة خطوة , خاصة في اللوب الأخير الذي يقوم بحساب قيمة مشتقة الدالة

عند التعويض عن t=0 فان قيمة مشتقة الدالة تساوي -4 والتي تستخدمها كـ index في المصفوفة plot وبم ان القيمة سالبة فالبرنامج من حقه ان يخرف كما يحب لأنه لم يضع القيمة صفر في المصفوفة لهذا فهي غير منتهية في هذه المنطقة وتستمر في الكتابة الى الحصول على أول صفر يقابله وهنا أول صفر قابله كان البايت الأول للمتغير i لأنه هو الذي يليه وبالمصادفه انه يحتوي على صفر , نفس العملية مع t = 1 فالناتج يساوي -2 وهنا الصفر كان البايت الثاني ف i لأن البايت الأول اصبح يساوي 1

ولهذا فالتخريف يظهر في السطر الأول والثاني

اجريت تعديل بسيط على الكود ساوضحه لك داخل الكود

#include <stdio.h>
#include <mem.h> // for memset
#define MAX 55  
int f(int t);
int main (void) {
  char plot[MAX +2] = {0};
  int i, t, funval;
  for( i = -15; i <= MAX; i += 5 )
    printf("%5d", i );
  printf("\n");
  for( i = -15; i <= MAX; i += 5 )
    printf("    |", i );
  printf("\n");
  memset(plot, ' ', sizeof(plot)); // نفس وظيفة اللوب ولكن اسرع
  plot[sizeof(plot)-1] = '\0'; // سبب ظهور حروف غريبة في نهاية السطر
  for( t = 0; t <= 9; ++t ) {
    funval = f(t) + 15; // اجمع 15 على قيمة الدالة من اجل استخدام الناتج كمؤشر
    plot[funval] = '*';
    printf("t=%2d%s\n", t, plot); // الغاء المسافة بين الرقم والنص
    plot[funval] = ' ';
  }
  return (0);
}
int f (int t) {
  return ( 2 * t - 4);
}

تم تعديل هذه المشاركة بواسطة Asm4all في 28 ديسمبر 2005 في 07:13

#3

مشكور اخوي Asm4all على التوضيح المبسط

ولكن عندي استفسار عن الكود الاخير والذي يطلب من المستخدم ادخال المعادله أي (( يكون الكود شامل وليس مخصص لمعادله واحده فقط كما في الاكواد السابقه ))

لقد قمت ببعض التعديلات عليه وهي عمل دالتين MAX و MIN وفيهما اقوم بحساب range او المدى للداله على عكس ما قمت بتعريفه في الامثله السابقه (( 55إلى -15 ))

ولكن لازال الخطأ موجود عند تشغيل البرنامج ؟؟ فما اعرف ما هو السبب ؟؟؟

#include<stdio.h> 
int f(int t);
main (void)
{
int a, b, c, MAX, MIN, i, t, funval;
char plot[MAX +2];  
printf(" Enter the coffiecent of the funcyion:");
scanf("%d%d%d", &a, &b, &c);
MIN= c - 5;  /* زياده خمس خانات لكي يكون الرسم منسق اكثر  */
MAX= 81 * a + 9 * b + c + 5;     /* زياده خمس خانات لكي يكون الرسم منسق اكثر  */
for( i = MIN; i <= MAX; i += 5 )
printf("%5d", i );
printf("\n");
for( i = MIN; i <= MAX; i += 5 )
printf("    |", i );
printf("\n");
for( i = MIN; i <= MAX + 1; ++i )
plot = ' ';
for( t = 0; t <= 9; ++t )
{
funval = f(t);
plot[funval] = '*';
plot[funval + 1] = '\0';
printf("t=%2d               %s\n", t, plot);
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
  return (0);
}
int f (int t)
{
return ( a * t * t + b * t + c);   /*     الخطأ يوجد هنا مع العلم انني قمت بتعريف جميع هذه المتغيرات؟؟؟؟   */
}

ما هو الخطأ في هذا الكود ؟؟؟؟؟؟؟؟؟

تم تعديل هذه المشاركة بواسطة BiSoN في 28 ديسمبر 2005 في 13:05

#4

لقد عرفت هذه المتغيرات داخل الmain و استخدمتهم في f و هناك لم يصبح لهم أي وجود

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#5

1 -

int f (int t)
{
return ( a * t * t + b * t + c);   /*     الخطأ يوجد هنا مع العلم انني قمت بتعريف جميع هذه المتغيرات؟؟؟؟   */
}

انت قمت بتعريف المتغيرات في الـ main ولكن لم تقم بتعريفها ولا تمريرها الى f

التعريف الصحيح

int f(int t, int a, int b, int c) {
  return ( a * t * t + b * t + c);
}

ولاستدعاء f في الـ main تستدعيها بهذا الشكل

f(t, a, b, c);

2 -

char plot[MAX +2];

كم تساوي قيمة MAX في هذه اللحظة ؟ قيمة غير معروفة ممكن تكون صفر مثلا أو قيمة سالبة او قيمة موجبة اقل من قيمة MAX التي سوف تحسب

يجب أن تقوم بانشاء السطر بطول القيم المحسوبة , لا اقل ولا اكثر , لهذا تحتاج الى تعريفها بعد حساب قيمة MIN و MAX

وللعلم بدلا من حسابها على انها 2 + MAX يجب حسابها على انها MAX - MIN لكي تعطيك امكانية تمثيل القيم في جميع الأماكن

3 -

كيف ستقوم بتمثيل قيم مثلا 120 قيمة على سطر يقبل 80 حرف فقط ؟ يجب أن تعدل طريقة التسطير هي الاخرى لتعتمد على البيانات المدخله وتغيير النسبة حسب هذه القيم

4 -

راجع الكود السابق ولاحظ التعديلات فيه

#6

الاخوان bashmohandes و Asm4all مشكورين على مروركم ومساعدتكم ...

ولكن اخوي Asm4all لم افهم ماذا تقصد في الفقره 3 من كلامك ،، ولم يشتغل الكود مع العلم اني قمت بعمل جميع التغييرات التي قمت بتوضيحها في الفره 2

#include<stdio.h>
int f(int t);
main (void)
{
int a, b, c, z, MAX, MIN, i, t, funval;
printf(" Enter the coffiecent of the funcyion:");
scanf("%d%d%d", &a, &b, &c);
MIN= c + 5; 
MAX= 81 * a + 9 * b + c + 5;
char plot[MAX - MIN];  /* يوجد الخطأ هنا ؟؟؟؟ */
printf("%5d", i );
printf("\n");
for( i = MIN; i <= MAX; i += 5 )
printf("    |", i );
printf("\n");
for( i = MIN; i <= MAX + 1; ++i )
plot = ' ';
for( t = 0; t <= 9; ++t )
{
funval = f(t) + 15;
plot[funval] = '*';
plot[funval + 1] = '\0';
printf("t=%2d%s\n", t, plot);
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
 return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  
}

وعند تشغيل الكود يظهر لي خطأ وهذه صوره الخطأ ؟

28_12_05_09_05_10_1135789510this.JPG

ولكم خالص شكري وتقديري واتمنى الا اكون ضايقتكم باستفساراتي

#7

:D كنت منتظر هذا الخطأ :lol:

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

راجع هذا الرابط هل تكتب السي++ بالصورة القياسية ؟

ولكن لا تهتم , فلو اخذت الكود كما هو للدكتور وراجعه فانه سيعترض هو الآخر على الكود , ولو حلفتله 100 مره انه شغال مش هيصدق :D

لهذا استخد الدالة malloc والدالة free , بم انك تكتب سي فقط وليس سي++

توجد اخطاء اخرى أبسطها

int f(int t);

المفروض تغيرها هي كمان

int f (int t, int a, int b, int c);

والفقرة رقم 3 هي اهم حاجة :unsure: , خليها لوقتها أول ما البرنامج ما يشتغل ويديك رسم هتفهمها

#8

والله جنني هالكود صار لي اسبوع اشتغل فيه وما رضي يشتغل :wacko: .................

طيب يا اخ Asm4all للحين ما اعرف اي شيء عن هالدوال malloc و free ؟ هل فيه طريقه ثانيه اقدر احل فيها بدون ما استخدم هالدوال وما هي ؟؟..

والاخطاء الثانيه صلحتها كلها وباقي هالخطأ ما راح ؟؟؟

#9
int a, b, c, z, MAX, MIN, i, t, funval;
char *plot;
.....
.....
.

scanf("%d%d%d", &a, &b, &c);
.....
plot = (char *) malloc(MAX - MIN);

تعامل مع plot كما تتعامل معها في البرنامج عندك , لا تحتاج لتغيير أي شيء آخر

....
....
free(plot);
return (0);
}
#10

طيب اخوي Asm4all انا باقي ما تعاملت مع الدوال (( malloc , free )) اللي قلتها بس راح اتعامل معاها الحين بس ما اعرف في مكتبه هي مثل stdio.h ؟؟؟؟

#11

هي مش صعبة ولا حاجة , بسيطة جدا , هي في المكتبة alloc.h

في بداية الكود اكتب

#include <alloc.h>
#12

مشكور اخوي Asm4all

والحين الكود يشتغل تمام ويقوم برسم الداله بشكل صحيح ولكن ينقصه شيء واحد وهو طريقه التسطير ؟؟ تعبت معاها حطيت كل الاحتمالات واخيرا وقفت على اقرب احتمال للحل وهو كالتالي :-

#include<stdio.h>
#include <alloc.h>
int f(int t, int a, int b, int c);
main (void)
{
int a, b, c, MAX, MIN, i, t, funval;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
plot = (char *) malloc(MAX - MIN);
for( i = MIN; i <= MAX; i += ((MAX - MIN) / 12)  )
printf("   %d", i );
printf("\n");
for( i = MIN; i <= MAX; i += ((MAX - MIN) / 12) )
printf("   |");
printf("\n");
for( i = MIN; i <= MAX + 1; ++i )
plot = ' ';
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 15;
plot[funval] = '*';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
 free(plot);
 return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  
}

ويظهر الناتج كما في الصوره التاليه :-

29_12_05_08_31_09_1135873869ts6er.JPG

اتمنى اعرف ايش المشكله في طريقه التسطير :rolleyes:

ولكم خالص شكري وتقديري

تم تعديل هذه المشاركة بواسطة BiSoN في 29 ديسمبر 2005 في 19:26

#13

لاحظ ان عدد الاسطر | وعدد الارقام متساوي المشكلة تكمن فى ان الارقام فى البدايه تتكون من عدد واحد ولكن عندما تصل للعدد 12 يصبح مكونات الرقم هو عددين بدل عدد واحد من ما يجعلك تفقد التنسيق..

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#14

يمكنك عمل التالى

for( i = MIN; i <= MAX; i += ((MAX - MIN) / 12)  )
if (i<10)
printf("   %d", i );
else
printf("  %d", i );

يعنى فى else تقلص عدد المسافات بحيث تصبح مسافه واحده اقل من الـif التى تسبقها..

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#15

اخوي احمد مشكور على ملاحظتك ؟؟

كلامك صحيح اخوي احمد في طريقة التسطير ولكن سوف تتعود المشكله اذا كانت قيم i مائه او اكثر؟؟

وعندها سوف يجب ان نقوم بعمل if و else مره اخرى ........

ولكن تم حل مشكله التسطير عن طريق الكود التالي :D

#include <stdio.h>
#include <alloc.h>
int f(int t, int a, int b, int c);
main (void)
{
int a, b, c, z, MAX, MIN, i, t, funval;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 12;
plot = (char *) malloc(MAX - MIN);
for( i = MIN; i <= MAX; i += z  )
printf("%5d", i );                        /*   تم تعديل التسطير من هنا    */
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("    |", i);
printf("\n");
for( i = MIN; i <= MAX + 1; ++i )
plot = ' ';
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 15;
plot[funval] = '*';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
 free(plot);
 return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  
}

ولكن توجد مشكله في الرسم الآن :wacko: ،، عند ادخال قيم مختلفه فتظهر حروف وارقام عربيه او يظهر شكل الرسم كما في الصور

29_12_05_09_13_44_1135876424ts6r.JPG

29_12_05_09_19_28_1135876768ts6eer.JPG

فما هي المشكله في ظهور الرسم بهذه الطريقه ؟؟؟

ولكم خالص شكري وتقديري

تم تعديل هذه المشاركة بواسطة BiSoN في 29 ديسمبر 2005 في 20:16

#16

المشكلة هى على النحو التالى

انت تقوم بحجز ذاكرة وفى العادة الذاكرة تحتوى على خرابيط لذلك يجب عليك بمسح محتوياتها, والحالة الثانيه هى عندما تختار c عدد سالب فى هذه الحالة فانت تستخدم ذاكرة اكبر من التى قمت بحجزها, فى هذه الحالة يعترض نظام التشغيل ويغلق برنامج...

#include <stdio.h>
#include <malloc.h>
#include <string.h>
int f(int t, int a, int b, int c);
main (void)
{
int a, b, c, z, MAX, MIN, i, t, funval;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 12;
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%5d", i );                        /*   Êã ÊÚÏíá ÇáÊÓØíÑ ãä åäÇ    */
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("    |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 15;
plot[funval] = '*';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  
}

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

الدالة memset تقوم بمسح الذاكرة او بالاحرى تضع ' ' فى الذاكرة بالكامل, وفى هذه الحالة لن تحتاج للحلقة التى تضع مسافات...

بالتوفيق

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#17

بعض التعديلات البسيطة

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MAXCHAR 70

int f(int t, int a, int b, int c);
void plotit(int row,int col); 
char *plot;

main (void)
{
    int a, b, c, z, MAX, MIN, i, t, funval;
    printf("Enter the coffiecent of the function:\n");
    scanf("%d%d%d", &a, &b, &c);
    printf("\n\n");
    MIN= c; 
    MAX= 81*a+9*b+c;
    z = (MAX - MIN) / 12;
    plot = (char *) malloc(MAXCHAR+1);
    printf("     ");
    for( i = MIN; i <= MAX; i += z  )
        printf("%5d", i );
    printf("\n");
    printf("     ");
    for( i = MIN; i <= MAX; i += z )
        printf("    |", i);
    printf("\n");
    for( t = 0; t <= 9; ++t )
    {
        funval = (f(t, a, b, c) +15)/12;
        plotit(t,funval);
    }
    free(plot);
    return (0);
}


void plotit(int row,int col)
{
    memset(plot,' ',MAXCHAR);
    plot[col+3]='*';
    plot[MAXCHAR]=0;
    printf("t=%2d,%s\n",row,plot);
}

int f (int t, int a, int b, int c)
{
    return ( a * t * t + b * t + c);  
}

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#18

مشكوري اخوي احمد غريب على مساعدتك

انا الحين اريد عند تشغيل الكود يقوم بطلب ادخال القيم a,b,c من المستخدم ثم يقوم باظهار خيارات وهي:-

1. Plot the function. ارسم الداله

2. Plot the derivative of the function. ارسم مشتقة الداله

3. Plot the function and its derivative. ارسم الداله ومشتقتها

4. Exit. خروج

Enter your choice: ادخل اختيارك

اي ان يكون عمله دمج ثلاثه اكواد في كود واحد..

مشابه لهذا الكود التالي: كود مبسط يقوم المستخدم بادخال رقمين وله خيارات اما ايجاد مجموعهما او حاصل الضرب او ايجاد المتوسط ....

include <stdio.h>
void main(){
int n1,n2,choice;
printf(“Enter n1: “);
scanf(“%d”, &n1);
printf(“Enter n2: “);
scanf(“%d”, &n2);
do { 
 printf(“1. Find Sum.\n”);
 printf(“2. Find Product.\n”);
 printf(“3. Find Average.\n”);
 printf(“4. Exit.\n”);
 printf(“Enter your choice: “);
 scanf(“%d”, &choice);
 switch(choice)
{
     case 1: printf(“The sum is %d\n”, n1+n2);
     break;
     case 2: printf(“The product is %d\n”, n1 * n2);
     break;
     case 3: printf(“The average is %lf \n”, (double)(n1+n2)/2);
     break;
     case 4: 
     break;
     default: printf(“Invalid choice.\n”);
     }
} while(choice != 4);
}

قمت بعمل بتصحيح الكودين الاول والثاني

الاول لرسم الداله

#include <stdio.h>
#include <malloc.h>
#include <string.h>
main (void)
{
int a, b, c, z, MAX, MIN, i, t, funval;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
int f(int t, int a, int b, int c);
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 15;
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%4d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("   |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 2;
plot[funval] = '+';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  

}

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

30_12_05_03_08_55_1135984135function.JPG

==================================

والثاني لرسم مشتقتها

#include <stdio.h>
#include <malloc.h>
#include <string.h>
main (void)
{
int a, b, c, z, MAX, MIN, i, t, funval;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
int f(int t, int a, int b, int c);
MIN= b - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 15;
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%4d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("   |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 9;
plot[funval] = '+';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( 2 * a * t + b );  

}

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

30_12_05_03_17_55_1135984675deri.JPG

==================================

والخيار الثالث لرسمهما معاَ ولم استطع عمله ولكن اعتقد ان ناتجه سيكون هكذا :wacko:

30_12_05_03_07_33_1135984053all.JPG

==================================

وبعد طول تفكير وجلوس اكثر من ست ساعات مقابل شاشه الكمبيوتر :wacko:

وصلت الى هذا الكود ولكن يوجد فيه اخطأ وايضا لم استطع اضافه الخيار الثالث ،

#include <stdio.h>
#include <malloc.h>
#include <string.h>
main(void)
{
int a, b, c, z, MAX, MIN, i, t, funval;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
int f(int t, int a, int b, int c);
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 10;
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%5d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("    |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 1;
plot[funval] = '*';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
do
{
printf("1. Plot the function\n");
printf("2. Plot the derivative of the function.\n");
printf("3. Plot the function and its derivative.\n");
printf("4. Exit.\n");
printf("\nEnter your choice: ");
scanf("%d", &choice);

switch(choice)
{
case 1:
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  
}
break;
case 2:
int f (int t, int a, int b, int c)
{
return ( 2 * a * t + b );  
}
break;
case 3: 
break;
case 4: 
break;
default: printf("Invalid choice.\n");
}
while(choice != 4);
}

اتمنى ان اجد مساعدتكم لحل مشكله هذا البرنامج ولكم خالص شكري وتقديري

#19

السلام عليكم

حل المشكلة الاخيرة

#include <stdio.h>
#include <malloc.h>
#include <string.h>
int f(int t, int a, int b, int c);
int f2(int t, int a, int b, int c);

main (void)
{
int a, b, c, z, MAX, MIN, i, t, funval,funval2;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 15;
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%4d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("   |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 2;
plot[funval] = '*';
funval2 = f2(t, a, b, c) + 9;
plot[funval2] = '+';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval2] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  

}
int f2(int t, int a, int b, int c)
{
return ( 2 * a * t + b );  

}

ومنها يمكنك ان تبداء فى حل باقى البرنامج, الكود يقوم بدمج الرسمتين فى رسمة واحده..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#20

الف شكر اخوي احمد على المساعده

بس واجهتني صعوبه في دمج الاكواد الثالثه في كود واحد عن طريق do, while واستخدام switch, case

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

ولكم خالص شكري وتقديري

تم تعديل هذه المشاركة بواسطة BiSoN في 31 ديسمبر 2005 في 15:27

#21

الى الجميع

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

ولكن يظهر فيه أخطاء قليله لم اعرف سببها اتمنى ممن يعرف سببها ان يخبرني مشكوراَ

وهذا هو الكود النهائي

#include <stdio.h>
#include <malloc.h>
#include <string.h>
int f(int t, int a, int b, int c);
int f2(int t, int a, int b, int c);
main (void)
{
int a, b, c, z, MAX, choice, MIN, i, t, funval,funval2;
char *plot;
printf("Enter the coffiecent of the function:\n");
scanf("%d%d%d", &a, &b, &c);
printf("\n\n");
MIN= c - 5; 
MAX= 81 * a + 9 * b + c + 5;
z = (MAX - MIN) / 15;
do
{
printf("1. Plot the function\n");
printf("2. Plot the derivative of the function.\n");
printf("3. Plot the function and its derivative.\n");
printf("4. Exit.\n");
printf("\nEnter your choice: ");
scanf("%d", &choice);

switch(choice)
{

case 1:
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%4d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("   |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 2;
plot[funval] = '+';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  

break;

case 2:
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%4d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("   |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 11;
plot[funval] = '+';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( 2 * a * t + b );  

break;

case 3:
plot = (char *) malloc(100*(MAX - MIN));
memset(plot,' ',100*(MAX-MIN));
for( i = MIN; i <= MAX; i += z  )
printf("%4d", i );                       
printf("\n");
for( i = MIN; i <= MAX; i += z )
printf("   |", i);
printf("\n");
for( t = 0; t <= 9; ++t )
{
funval = f(t, a, b, c) + 2;
plot[funval] = '*';
funval2 = f2(t, a, b, c) + 9;
plot[funval2] = '+';
plot[funval + 1] = '\0';
printf("t=%d%s\n", t, plot);    
plot[funval] = ' ';
plot[funval2] = ' ';
plot[funval + 1] = ' ';
}
free(plot);
return (0);
}
int f (int t, int a, int b, int c)
{
return ( a * t * t + b * t + c);  
}
int f2(int t, int a, int b, int c)
{
return ( 2 * a * t + b ); 

break;

case 4: 

break;

default: printf("Invalid choice.\n");

}
}
while(choice != 4);
}

وهذه صور الاخطاء وأماكنها

31_12_05_09_04_26_1136048666w1.JPG

31_12_05_09_06_03_1136048763w_.JPG

31_12_05_09_09_02_1136048942w3.JPG

ولكم جزيل الشكر والتقدير

#22

يا أخي , الكود الأخير والنهائي هذا copy و past في منتصف دالة الـ main يعني توجد دالة محشورة داخل دالة الـ main

#include <stdio.h>
#include <malloc.h>
#include <string.h>
int f(int t, int a, int b, int c);
int f2(int t, int a, int b, int c);
int main (void) {
  int a, b, c, z, MAX, choice, MIN, i, t, funval,funval2;
  char *plot;
  printf("Enter the coffiecent of the function:\n");
  scanf("%d%d%d", &a, &b, &c);
  printf("\n\n");
  MIN= c - 5; 
  MAX= 81 * a + 9 * b + c + 5;
  z = (MAX - MIN) / 15;
  do {
    printf("1. Plot the function\n");
    printf("2. Plot the derivative of the function.\n");
    printf("3. Plot the function and its derivative.\n");
    printf("4. Exit.\n");
    printf("\nEnter your choice: ");
    scanf("%d", &choice);
    switch(choice) {
      case 1:
        plot = (char *) malloc(100*(MAX - MIN));
        memset(plot,' ',100*(MAX-MIN));
        for( i = MIN; i <= MAX; i += z)
          printf("%4d", i );
        printf("\n");
        for( i = MIN; i <= MAX; i += z )
          printf("   |", i);
        printf("\n");
        for( t = 0; t <= 9; ++t ) {
          funval = f(t, a, b, c) + 2;
          plot[funval] = '+';
          plot[funval + 1] = '\0';
          printf("t=%d%s\n", t, plot);
          plot[funval] = ' ';
          plot[funval + 1] = ' ';
        }
        free(plot);
        return (0);
      }

الكود الى هنا يظهر سليم , بعد كده الكود عمل حادثة , دخلت فيه دالة ما تعرفش جاتله منين ؟

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

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

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