פורסם 2005 באוקטובר 420 שנים נתנו לנו תרגיל בשפת C ואני שובר את הראש איך לפתור תודה מראש לעוזרים ...התוכנית קולטת ערכים של 3 משתנים (x,y,z) ומסכמת אותם ומכניסה למשתנה בשם Resובודקת *אם גדול מ12,000,000 אז תופיע הודעת OVERFLOW*אם קטן התוכנית תקלוט עוד משתנה (נגיד n) שעליו להיות בתווך של מ-0 עד 100 ותעלה את Res בחזקת nזאת אומרת שבסופו של דבר הפתרון בסוף הוא Res = Res^nהבעיה היחידה שלי היא איך אני מעלה את הRes בחזקת ה-n
פורסם 2005 באוקטובר 420 שנים אני אומנם לא יודע C, אבל מבחינה לוגית אני מאמין שהפתרון יהיה אותו פתרון כמו בפסקל (שכללית זאת שפה שדי דומה לC):כדי לעשות Res^n מציבים את הערך של res באיזשהו משתנה (X), כדי לקבל את התשובה צריך לכפול את X ב Res (את התוצאה של הכפל הזה כמובן מציבים או ב X או ב Res) בתוך לולאה שתרוץ n-1 פעמים...יש לי הרגשה שזה לא יצא הכי ברור, אני ינסה להסביר את זה שוב:מציבים את הערך של Res במשתנה X.פותחים לולאה שתרוץ n-1 פעמים שבתוכה יוצב לתוך Res הערך של Res כפול X (כך שRes גדל כל פעם)אה, ואל תשכח לבדוק קודם אם n=0...מקווה שתבין...
פורסם 2005 באוקטובר 420 שנים פתרון יותר פשוט - לאתחל משתנה ב-1, ואז כל פעם לכפול אותו ב-res, ככה n פעמים ואז לא צריך לבדוק 0.
פורסם 2005 באוקטובר 420 שנים ככה:int x = 1;for (int i = 0 ; i < n ; ++i) { x *= res;}res = x;יש מבין?[
פורסם 2005 באוקטובר 420 שנים מחבר שניצל לא הבנתי את ההודעה האחרונה שלך אבל לא משנה הנה הקוד המלא של התוכנית ...הבעיה עכשיו היא שכשאני מכניס מספרים כמו 1 או 2 התוצאה יוצאת נכונה אבל ב3 ומעלה הוא מפשל ...אם אפשר הסבר למה אני ישמח ...#include <stdio.h>#include <conio.h>long int x , y , z , Res ;int n ;void main (void){clrscr() ;printf ("ENTER X VALUE: ") ;scanf ("%ld",&x) ;printf ("ENTER Y VALUE: ") ;scanf ("%ld",&y) ;printf ("ENTER Z VALUE: ") ;scanf ("%ld",&z) ;Res=x+y+z ;if (Res>12000000){printf ("OVERFLOW") ;goto sof ;}get_n : printf ("ENTER N VALUE: ") ;scanf ("%d", &n) ;if (0<n && n<100){while (n>1){Res=Res*Res ;n-- ;}printf ("Res = %ld \n", Res) ;goto sof ;}goto get_n ;sof: getch() ;}
פורסם 2005 באוקטובר 520 שנים בלולאה שלך המשתנה RES עולה בחזקת 2 בכל סיבובאתה צריך לקבוע משתנה עזר שיהיה בערך המקורי של RESוכל סיבוב לכפול בו
פורסם 2005 באוקטובר 520 שנים זה לא ממש בעיה:#include <stdio.h>#include <math.h>void main(){int x,y,z,n,res,v=0;printf("Please enter 3 nums.\n");scanf("%d %d %d",&x,&y,&z);res=x+y+z;if(res>12000000)printf("Overflow\n");if(res<12000000){while(v!=1){printf("Please enter another num.\n");scanf("%d",&n);if(n>=0 && n<=100)v=1;elseprintf("Error. Please enter vaild values.");}res=pow((double)res,(double)n);printf("The sum is: %d",res);}}
פורסם 2005 באוקטובר 520 שנים אוקי, כמה דברים:1. אל תשתמש ב-goto. זה יוצר קוד מכוער ולא קריא, וזה פשוט תכנות גרוע.2. למה אתה משתמש ב-while ולא ב-for?3. בעצם, למה לא עשית בדיוק מה שאמרתי? (הכוונה היא ל-EliranB, לא orlupo)
פורסם 2005 באוקטובר 620 שנים ככה: int x = 1;for (int i = 0 ; i < n ; ++i) { x *= res;}res = x; יש מבין?[ טיפה עיניים :
פורסם 2005 באוקטובר 820 שנים למה שלא תשתמש בMATH.H ובPOW כפי שהציעו לך כבר?הרבה יותר נוח, והרבה יותר יעיל ומהיר(אני מניח שכל הפונ הספרייה ממומשות בASM ולא בC).
פורסם 2005 באוקטובר 820 שנים יכול להיות שהוא לא למד את זה אבל שיהיה...אני למדתי על math.h עוד ביום הראשון שלומדים את התוכנית של "Hello World".
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.