עבור לתוכן

עזרה בתכנית בC, קביעת יחסי ישרים.

Featured Replies

פורסם

שלום חברים,

נתנו לי תרגיל שאני לא יודע מה לבדוק בו קודם. אודה לכם אם תעזרו לי כי אבדתי.

התכנית אמורה לפתור מערכת משוואות בשני נעלמים מהצורה:

ax + by = c

dx + ey = f

אני מקבל את a.b.c.d.e.f.

המטרה של התרגיל היא לקבוע האם הישרים נחתכים, מקבילים, מתלכדים. אם נחתכים אז האם הם ניצבים.

שלשה בצורה 1 0 0 תיתקל בהודעת שגיאה שהשלשה לא מייצגת ישר.

כמובן שאם הישרים נחתכים ויש פתרון יחיד אז צריך להציג אותו (את הX ואת הY שפותרים את המשוואה).

אין לי מושג איך להתחיל. אם השלשות מייצגות ישרים זה די קל לבדוק.

אבל הלאה אני תקוע לגמרי.

תודה רבה מראש לכל העוזרים.

פורסם

מכפלה סקלרית של ווקטורי הכיוון.

פורסם

תעשה את זה פשוט מחומר של כיתה י"א

דבר ראשון תהפוך את המשוואות למשוואות ישר: y=mx+c

זאת אומרת y=(-a/b)x+c/b למשוואה הראשונה ואז כדי לראות אם הישרים נחתכים אתה צריך להשוות את ה m של המשוואות

אם הם שווים אז הם מקבילים אם הם הופכים ושלילים אז הם אנכים ואם הם סתם שונים אז הם נחתכים.

וכדי לראות עם הם מתלכדים פשוט תשווה בין המשוואות.

פורסם
  • מחבר

תעשה את זה פשוט מחומר של כיתה י"א

דבר ראשון תהפוך את המשוואות למשוואות ישר: y=mx+c

זאת אומרת y=(-a/b)x+c/b למשוואה הראשונה ואז כדי לראות אם הישרים נחתכים אתה צריך להשוות את ה m של המשוואות

אם הם שווים אז הם מקבילים אם הם הופכים ושלילים אז הם אנכים ואם הם סתם שונים אז הם נחתכים.

וכדי לראות עם הם מתלכדים פשוט תשווה בין המשוואות.

אבל נגיד אם אני מקבל השלשות:

2 1 0

4 0 1

אז Y=2 ו X=4 וזה הפתרון היחיד. איך אני בודק מצב כזה בתכנית?

ובמשוואה התחתונה המקדם של Y הוא 0 ואסור לי לחלק בו.

אני מסתבך באיך ליצור את כל ההגבלות האלה.

פורסם

יש פתרון בסטיקי

פורסם

כדי למצוא את הפתרון של נק' החיתוך קודם כל תפתור את השאלה מתמטית.

ז"א בטא את X ו Y בעזרת m, n ,p,q כשנגיד m ו n מייצגים את שיפועי הישרים ו q ו p מייצגים את חיתוכם עם ציר ה Y, כמו במשוואה Y = aX + b

א"כ גש למחשב ותיצור 4 משתנים עבור m n p q, חשב את ערכם (בעזרת הקלט) כמו ש johndou כבר הראה, וחשב את ערך נק' החיתוך.

אם יש מקרים של אפשרויות לחילוק ב 0 באלגוריתם שלך תבדוק את זה מראש בעזרת התניה ומקרים שונים (if..else, או בעזרת switch).

פורסם
  • מחבר

חבר'ה, כתבתי תכנית שמקבלת שני ישרים מהצורה ax + by =c

dx + ey = f

מקבל את המקדמים ואמור לדעת מה היחס ביניהם (מקבילים, נחתכים, מתלכדים).

כתבתי את הקוד ולפי ריצה יבשה הוא אמור לפעול טוב אך ברגע שאני מריץ את התכנית X וY מקבלים ערכים משוגעים במקום הערכים שכתבתי בתכנית.

אין לי מושג איפה הבאג, אולי תוכלו אתם לעזור לי.

אודה לכם מאוד.

מצ"ב הקוד שכתבתי.

תודה רבה מראש לכל העוזרים.

[left]#include <stdio.h>

int main()
{
float a,b,c,d,e,f,x,y;
scanf("%f %f %f",&a,&b,&c);
scanf("%f %f %f",&d,&e,&f);
if((a == 0) && (b == 0) && (c != 0))
{
if((d == 0) && (e == 0) && (f != 0))
{
printf("Error: Triplet #1 does not represents coefficient of a line.\n");
printf("Error: Triplet #2 does not represents coefficient of a line.\n");
}
else
printf("Error: Triplet #1 does not represents coefficient of a line.\n");
}
else
{
if((d == 0) && (e == 0) && (f != 0))
{
printf("Error: Triplet #2 does not represents coefficient of a line.\n");
}
else
{
if((a*e == b*d) && (b*f == c*e))
{
printf("Result: The equations have an infinite number of solutions\n");
}
if((a*e == b*d) && (b*f != c*e))
{
printf("Result: The equations have no solution\n");
}
else
{
y = ((c*d)-(f*a))/((b*d)-(a*e));
if (a != 0)
{
x = (c-(b*y))/a;
if(x == ((int)x))
{
if(y == ((int)y))
printf("Result: The equations have a single solution: x=%d y=%d\n",x,y);
else
printf("Result: The equations have a single solution: x=%d y=%.3f\n",x,y);
}
else
{
if(y == ((int)y))
printf("Result: The equations have a single solution: x=%.3f y=%d\n",x,y);
else
printf("Result: The equations have a single solution: x=%.3f y=%.3f\n",x,y);
}
if(((a*b)/(e*d)) == -1)
{
printf("Normal? Yes\n");
}
else
{
printf("Normal? No\n");
}
}
else
{
x = (f-(e*y))/d;
if(x == ((int)x))
{
if(y == ((int)y))
printf("Result: The equations have a single solution: x=%d y=%d\n",x,y);
else
printf("Result: The equations have a single solution: x=%d y=%.3f\n",x,y);
}
else
{
if(y == (int)y)
printf("Result: The equations have a single solution: x=%.3f y=%d\n",x,y);
else
printf("Result: The equations have a single solution: x=%.3f y=%.3f\n",x,y);
}
if(((a*b)*(e*d)) == -1)
{
printf("Normal? Yes\n");
}
else
{
printf("Normal? No\n");
}
}
}
}
}
return 0;
}
[/left]

ד"א אני משתמש בשיטת השוואת המקדמים.

פורסם

נראה סבבה (לא ממש התעמקתי בנוסחאות עצמן, אני מניח שהן תקינות).

כמה הערות:

א. אל תשתמש ב-float, תשתמש ב-double. הוא יותר מדויק ויותר יעיל. שים לב שתצטרך לשנות את ה-scanf וה-printf בהתאם (אני מניח שאם אתה מריץ את התכנית רק עם ערכים שלמים זה לא משנה יותר מדי).

ב. שים לב שאתה מדפיס את x ו-y בתור שלמים, אבל הם מטיפוס float. אתה צריך להמיר אותם ל-int לפני ההדפסה אם אתה רוצה להדפיס אותם כ-d%. ייתכן שזו הבעיה שיש לך.

פורסם
  • מחבר

נגיד ואני מריץ את התכנית עם הקלט:

2 0 1

2 1 0

אז התכנית מדפיסה - את המשפט של הפתרון יחיד ואז

x=2

y= 1135917313

גם כשתיקנתי את ההדפסות של %d עם ההמרה למשל-

	printf("Result: The equations have a single solution: x=%.3f y=%d\n",x,(int)y);

אגב, גם שיניתי את ההגדרות של כל המשתנים לdouble ובקלט הוספתי %lf

פורסם

ואללה, לא'דע.

נסה להדפיס את כל המשתנים, וגם את שלבי הביניים בחישוב של y ותראה מה יצא (אני בספק שזו הבעיה, אבל שווה לבדוק).

חוץ מזה, אולי ההמרה לא עבדה (אני אף פעם לא זוכר איך בדיוק עובדים הדברים האלה). נסה להדפיס את y כ-double ולא כ-int, או שתמיר אותו מחוץ ל-printf (כלומר תגדיר int חדש ותשים בו את הערך של y, ואז תדפיס אותו במקום את y).

פורסם
  • מחבר

ניסיתי, אבל גם זה לא עוזר וY מודפס בתור איזה לא יודע מה, תודה בכל זאת על העזרה.

אני אנסה לחפש מקורות עזרה אחרים.

פורסם

תריץ גם ב debugger נורמלי ותעכוב אחרי התוכנית.

פורסם
  • מחבר

התוכנה של הויזואל סטודיו 6 לא נותנת לי לעשות דיבאג ועוד יותר לא נותנת לי להריץ את התכנית (ברגע שאני עושה execute מופיע מסך דוס ומיד נסגר)

ניסיתי להתקין מחדש אך זה לא עזר. זה הקוד המעודכן:

#include <stdio.h>

int main()
{
double a,b,c,d,e,f,x,y;
int y1;
scanf("%lf %lf %lf",&a,&b,&c);
scanf("%lf %lf %lf",&d,&e,&f);
if((a == 0) && (b == 0) && (c != 0))
{
if((d == 0) && (e == 0) && (f != 0))
{
printf("Error: Triplet #1 does not represents coefficient of a line.\n");
printf("Error: Triplet #2 does not represents coefficient of a line.\n");
}
else
printf("Error: Triplet #1 does not represents coefficient of a line.\n");
}
else
{
if((d == 0) && (e == 0) && (f != 0))
{
printf("Error: Triplet #2 does not represents coefficient of a line.\n");
}
else
{
if((a*e == b*d) && (b*f == c*e))
{
printf("Result: The equations have an infinite number of solutions\n");
}
if((a*e == b*d) && (b*f != c*e))
{
printf("Result: The equations have no solution\n");
}
else
{
y = ((c*d)-(f*a))/((b*d)-(a*e));
if (a != 0)
{
x = (c-(b*y))/a;
if(x == ((int)x))
{
if(y == ((int)y))
{
y1 = (int)y;
printf("Result: The equations have a single solution: x=%d y=%d\n",x,y1);
}
else
{
printf("Result: The equations have a single solution: x=%d y=%.3f\n",(int)x,y);
}
}
else
{
if(y == ((int)y))
{
y1 = (int)y;
printf("Result: The equations have a single solution: x=%.3f y=%d\n",x,y1);
}
else
{
printf("Result: The equations have a single solution: x=%.3f y=%.3f\n",x,y);
}
}
if(((a*b)/(e*d)) == -1)
{
printf("Normal? Yes\n");
}
else
{
printf("Normal? No\n");
}
}
else
{
x = (f-(e*y))/d;
if(x == ((int)x))
{
if(y == ((int)y))
{
y1 = (int)y;
printf("Result: The equations have a single solution: x=%d y=%d\n",(int)x,y1);
}
else
{
printf("Result: The equations have a single solution: x=%d y=%.3f\n",(int)x,y);
}
}
else
{
if(y == (int)y)
{
y1 = (int)y;
printf("Result: The equations have a single solution: x=%.3f y=%d\n",x,y1);
}
else
{
printf("Result: The equations have a single solution: x=%.3f y=%.3f\n",x,y);
}
}
if(((a*b)*(e*d)) == -1)
{
printf("Normal? Yes\n");
}
else
{
printf("Normal? No\n");
}
}
}
}
}
return 0;
}

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים