עבור לתוכן

c|תוכנית שורשים מורכבים

Featured Replies

פורסם

אפשר בבקשה הסבר של כל חלק בקוד מה הוא אומר.

באתר שאני לומד את זה אין הסבר מפורט.איך אני יכול להבין כך?

תודה.

 complex domain */else
{
real = (double)(-b)/(2*a);
img = (double)sqrt(-delta)/(2*a);
/* x1 */
printf("X1 = ");
if (real != 0)
{
printf("%.2lf", real);
if (img > 0) printf(" + ");
else if (img < 0) printf(" - ");
if (img == 1 || img == -1) printf("i\n");
else printf("%.2lfi\n", img);
return 0;
}
else
{
if (img == 1) printf("i\n");
else if (img == -1) printf("-i\n");
else printf("%.2lfi\n", img);
}
/* x2 */
img = -img;
printf("X2 = ");
if (real != 0)
{
printf("%.2lf", real);
if (img > 0) printf(" + ");
else if (img < 0) printf(" - ");
if (img == 1 || img == -1) printf("i\n");
else printf("%.2lfi\n", img);
return 0;
}
else
{
if (img == 1) printf("i\n");
else if (img == -1) printf("-i\n");
else printf("%.2lfi\n", img);
return 0;
}
}
return 0;
}

פורסם

תתחיל בלהריץ פעם רק שורה אחת של קוד, ותראה מה היא עושה על קלטים שונים.

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

 real = (double)(-b)/(2*a);

ותן ערכים שונים ל-a ול-b, ותראה מה יוצא.

אח"כ תוסיף את השורה הבאה, ואח"כ את הבלוק if הבא, וכל פעם תדפיס ותראה מה הערך שיצא.

אין דרך אחרת ללמוד מאשר לנסות בעצמך.

פורסם
  • מחבר

הרצתי את הקוד הזה ב-vs

ובחלון השחור אני לוחץ על מספר כלשהוא

ואחר כך עוד מספר והחלון נעלם איך אני בודק את הקלטים שורה שורה?

בלי שהחלון יעלם?

 #include<stdio.h>#include<conio.h>
#include<math.h>


int main()
{
float a,b,c,alf,bt,dlt;
clrscr();


printf("\n Enter a: ");
scanf("%f",&a);


printf("\n Enter b: ");
scanf("%f",&b);


printf("\n Enter c: ");
scanf("%f",&c);


dlt=b*b-4*a*c;


if(dlt==0)
{
printf("\n ALPHA=BETA=%f",-b/(2*a));
}
elseif(dlt<0)
{
printf("\n Imaginary Roots");
}
else
{
alf=(-b+sqrt(dlt))/(2*a);
bt=(-b-sqrt(dlt))/(2*a);
printf("\n\n Alpha = %f\n Beta=%f\n",alf,bt);
}


getch();


return 0;
}

נערך על-ידי eliom

פורסם

יותר חשוב- למדת מספרים מרוכבים?

פורסם
  • מחבר
יותר חשוב- למדת מספרים מרוכבים?

בשלב זה אני לא צריך ללמוד מספרים מרוכבים.

אתה יכול לענות לי על השאלה הבסיסית ששאלתי?

פורסם

אתה אפילו לא מבין מה ההבדל בין קלט, פלט, ומשתנים.

קלט - זה כל מה שהתוכנית שלך קולטת מהמשתמש, כלומר המספרים שאתה מכניס.

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

פלט - זה מה שהתוכנית שלך מדפיסה למשתמש.

עכשיו כשיש לך סדר בראש, אתה יכול לשאול את השאלות הנכונות:

1) איך אני עוקב אחרי החישובים דרך התוכנית שורה אחר שורה?

תשובה: אתה בודק מה קורה למשתנים בין שורה לשורה. כמובן שמספיק רק לבדוק את המשתנים שהיתה אליהם השמה - כלומר שהשתנו.

2) אז איך אני בודק את המשתנים בין שורה לשורה?

תשובה: יש לך שתי אפשרויות עיקריות: אפשרות ראשונה זה להוסיף אחרי כל שורה הדפסה (פלט!) של אותם משתנים שהשתנו. אפשרות שנייה זה להשתמש ביכולות ה-debugging של VS, אשר מאפשר להריץ תוכניות שורה אחרי שורה, ולהראות את המשתנים בכל רגע.

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

נערך על-ידי Zelig

פורסם

הקוד בתגובה השניה שלך לוקח a,b,c מהמשתמש, ובודק את הדיסקרימיננטה. לפי זה הוא מחליט אם לפתור משוואה ריבועית (delta>0), או מקרה פרטי ונוח שלה (delta==0), או להכריז בקול שהשורשים מרוכבים ולא לחשב אותם (delta<0).

הקוד בתגובה הראשונה שלך הוא פונקציה למציאת השורש המרוכב. הוא מפריד בין החלק הממשי (real) והמדומה (img). החלק הממשי הוא -b/2a. בחלק המדומה הוא עושה שורש של מינוס הדיסקרימיננטה (נסה להבין מדוע, זה חשוב), ומחלק ב-2a. הוא מחליט אם לחבר או לחסר את החלק הממשי מהפתרון, ומביא גם כל מיני מקרים פרטיים: מה לעשות אם החלק הממשי שווה ל-0, אם החלק המדומה שווה ל i,-i וכו'. ואת זה מדפיס בתור הפתרון x_1.

אח"כ הוא עושה את אותו הדבר עם x_2, בהיפוך יסמן של החלק המדומה ביחס ל-x_1.

זה הכל.

פורסם
  • מחבר

אבל מה הבעיה בקוד.

הזה אני רוצה לעשות חישוב שורה שורה באמצעות

הקונסול.כי ככה אני יותר יבין.

וזה ההודעה שאני מקבל.

<a  href=%7Boption%7Dhttp://up400.siz.co.il/up1/hmyldwmzdmry.jpg' alt='hmyldwmzdmry.jpg'>

 #include <stdio.h>#include <math.h>
int main()
{
int a, b, c;
int delta;
double real, img;
printf("Please enter a, b, c: ");
scanf("%d%d%d", &a, &b, &c);
/* Check if there are solutions */
if (a == 0 && b == 0 && c != 0)
{
printf("No solution.\n");
return 0;
}
/* Infinite number of solutions */
else if (a == 0 && b == 0 && c == 0)
{
printf("Infinite number of solutions.\n");
return 0;
}
/* One-degree equation? */
else if (a == 0)
{
printf("X = %.2lf\n", (double)-c / b);
return 0;
}
/* Calculate delta */
delta = b*b - 4*a*c;
/* If delta is positive - there are 2 solutions */
if (delta > 0)
{
printf("X1 = %.2lf\n", (-b + sqrt(delta))/(2*a));
printf("X2 = %.2lf\n", (-b - sqrt(delta))/(2*a));
return 0;
}
/* If delta is zero - there is one solution */
else if (delta == 0)
{
printf("X = %.2lf\n", (double)-b/(2*a));
return 0;
}
/* If delta is negative - the solutions belongs to

פורסם

שמת לב שהקוד בכלל לא מתקמפל? מופיעות המון שגיאות למטה.

נראה שהקוד שלך בכלל קטוע.

פורסם

eliom, אתה מסתלבט פה על כולם או שאתה באמת טיפש כמו שאתה נראה?

פורסם
eliom, אתה מסתלבט פה על כולם או שאתה באמת טיפש כמו שאתה נראה?

לא יפה. כל עוד הוא לא פתח יותר מ-3 שירשורים על אותו נושא בדיוק לאחר קבלת תשובה (אהםספקגנריאהם) הוא משתמש לגיטימי.

פורסם
  • מחבר
eliom, אתה מסתלבט פה על כולם או שאתה באמת טיפש כמו שאתה נראה?[

ב

נערך על-ידי eliom

ארכיון

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

דיונים חדשים