שאלה בשפת C על לולאה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה בשפת C על לולאה


EliranB

Recommended Posts

נתנו לנו תרגיל בשפת C ואני שובר את הראש איך לפתור תודה מראש לעוזרים ...

התוכנית קולטת ערכים של 3 משתנים (x,y,z) ומסכמת אותם ומכניסה למשתנה בשם Res

ובודקת

*אם גדול מ12,000,000  אז תופיע הודעת OVERFLOW

*אם קטן התוכנית תקלוט עוד משתנה (נגיד n)

שעליו להיות בתווך של מ-0 עד 100   ותעלה את Res  בחזקת n

זאת אומרת שבסופו של דבר הפתרון בסוף הוא    Res = Res^n

הבעיה היחידה שלי היא איך אני מעלה את הRes בחזקת ה-n

קישור לתוכן
שתף באתרים אחרים

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

כדי לעשות Res^n מציבים את הערך של res באיזשהו משתנה (X), כדי לקבל את התשובה צריך לכפול את X ב Res (את התוצאה של הכפל הזה כמובן מציבים או ב X או ב Res) בתוך לולאה שתרוץ n-1 פעמים...

יש לי הרגשה שזה לא יצא הכי ברור, אני ינסה להסביר את זה שוב:

מציבים את הערך של Res במשתנה X.

פותחים לולאה שתרוץ n-1 פעמים שבתוכה יוצב לתוך Res הערך של Res כפול X (כך שRes גדל כל פעם)

אה, ואל תשכח לבדוק קודם אם n=0...

מקווה שתבין...

קישור לתוכן
שתף באתרים אחרים

שניצל לא הבנתי את ההודעה האחרונה שלך אבל לא משנה הנה הקוד המלא של התוכנית ...

הבעיה עכשיו היא שכשאני מכניס מספרים כמו 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() ;
}

קישור לתוכן
שתף באתרים אחרים

זה לא ממש בעיה:

#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;

else
printf("Error. Please enter vaild values.");
}

res=pow((double)res,(double)n);

printf("The sum is: %d",res);
}
}

קישור לתוכן
שתף באתרים אחרים

אוקי, כמה דברים:

1. אל תשתמש ב-goto. זה יוצר קוד מכוער ולא קריא, וזה פשוט תכנות גרוע.

2. למה אתה משתמש ב-while ולא ב-for?

3. בעצם, למה לא עשית בדיוק מה שאמרתי? (הכוונה היא ל-EliranB, לא orlupo)

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...