תוכנית למציאת שלשות פיתוגאריות

srulikbd

New member
תוכנית למציאת שלשות פיתוגאריות

ניסיתי לכתוב תוכנית בשפת C שתמצא שלשות של מספרים שמקיימות את המשוואה המפורסמת a^2+b^2=c^2 , לדוגמא המספרים 3 4 5 מקיימים את המשוואה. לא הלך לי.ניסיתי להריץ בvisual c++ וגם בdev C ובשניהם הם רצו משתנה double או משהו כזה.
 

yossiea

New member
רק הערה קטנה:

כשאתה כותב a^2+b^2 אתה בטח מתכון ל-a בחזקת 2 + b בחזקת 2 נכון? תגיד ממתי עושים חזקה ב-C/C++ עם הסימבול ^ זה לא בייסיק! הסמל הזה ב-C זה XOR תכתוב פשוט a*a במקום a^2.
 

srulikbd

New member
לא עוזר

#include<stdio.h> #include<math.h> #define n 100 void main() { float a, b, i, j, for(i=1;i<n;i++) for(j=i+1;j<n;j++) { a=i; b=j; if((sqrt(a*a+b*b))%2==1) printf("%f %f %d\n",a, b, sqrt(a*a+b*b)); } }​
 

vinney

Well-known member
תעבירו את זה לשפות תכנות

אלא אם כן אתם רוצים לדבר על האלגוריתם עצמו, שלדעתי לא נכון, אבל מהקוד קצת קשה להבין מה ניסית לעשות פה... וb*2 זה לא b בריבוע, זה b כפול 2.
 

דודהלי

New member
לא בזה הוא טעה

זה כן צריך להיות a*a+b*b אבל מה פתאום מודולו 2? מה הקשר? אנחנו רוצים לקבל שהשורש יהיה מספר שלם, לכן צריך שהשורש יהיה שוו לעיגול שלו.
 
מה הקשר בין מה שאתה מנסה לעשות לבין מה שאתה עושה בפועל? התוכנית שלך בודקת אם השורש של a בריבוע ועוד b בריבוע הוא מספר אי-זוגי. אתה בודק אם השארית (מודולו, המסומן %) מחלוקה ב 2 היא 1. מה הקשר בין זה לבין מה שאתה מנסה לעשות? איך זה שהתוצאה אי-זוגית פותר לך את הבעיה? נסח קודם במילים מה הבדיקה שאתה רוצה לעשות.
 

איתן333

New member
הטעות שלך היא שהמשתנים שלך הם מסוג

float, כשאתה מחפש בכלל את הטבעיים, כלומר int או unsigned int. זה גם מה שגורם לשגיאה בקומפילציה, כי מודולו מוגדר רק על מספרים שלמים, ולא על ממשיים.
 

איתן333

New member
אההה, וכמובן שזה גם בכלל לא נכון

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

it4chi

New member
זו לא דרכה יעילה

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

ron369

New member
אוי, הזכרונות...

ממש גרמת לי להתקין qbasic 1.1, ולקרוא קצת קוד ישן... בכל מקרה, אתה בטח רוצה לבדוק אם המספר בתוצאה של החלוקה בשורה הוא *שלם*.
 

ELIELI22

New member
מה רצית לעשות ???

תנסח/י לי טוב אני אכתוב לך קוד .(אני מקווה) .
 

ELIELI22

New member
כתבתי משהו קטן ופשוט .

זה לא אלגוריתם יעיל אבל זה עובד . בהצלחה .
 
למעלה