נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עזרה בהמרת יחידות מרחקים -שפת C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
yehouda
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 28 November 2008
מדינה: Israel
משתמש: מנותק/ת
הודעות: 66
נשלח בתאריך: 29 November 2008 בשעה 13:25 | IP רשוּם
ציטוט yehouda

אני מצרף את הקוד שלי אשמח לדעת מה לא בסדר -הוא לא עובד חלק

#include <stdio.h>
float  main ()

{
 float f, y, m, i,x;
    int  c;

  
 printf("use those value after the number, f=30.48,y=91.44,m=100,i=2.54");
 printf("enter number with prefix(f,y,m,i) \n");
 
     scanf("%f,%c" ,&x,&c);

  if (x<=0)
   return  0;
  else

  if (!(c=f)||!(c=y)||!(c=m)||!(c=i)) //*verify that user enter value correctlly*//
 
return 0;
  
 
   else

    if (c==f)  {    
     f=30.48;
  x=(f*x);
  printf("%.2f" ,x);
    }
   
else
if (c==y)  {     y=91.44;
  x=(y*x);
  printf(" %.2f" ,x);
}
    
 else  

  
  if (c==m) {      m=100;
  x=(m*x);
  printf("%.2f" ,x);}
   else

    if (c==i)  {     i=2.54;
  x=(i*x);
  printf("%.2f" ,x);}
return 0;
}

 

 

 

היי שוב התוכנית המתבקשת הינה :

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

המייצג את יחידות המידה : ,f או y, m, i : רווח) אחד מן התווים הבאים

בהתאמה. foot או yard, meter, inch

על התכנית לחשב ולהדפיס את הקלט ואת המרחק המחושב על פי יחידת המידה,

ביחידות של סנטימטרים, על פי טבלת ההמרה הבאה :

1 meter = 100 cm

1 yard = 91.44 cm

1 foot = 30.48 cm

1 inch = 2.54 cm

חזרה לתחילת העמוד הצג את כרטיס החבר של yehouda חפש הודעות אחרות של yehouda
 
כפיר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 November 2008 בשעה 15:51 | IP רשוּם
ציטוט כפיר

התכנית שלך מלאה בשגיאות. ועדיף לכתוב אותה ב-switch ולא ב-if-else.
להלן רשימת השגיאות (לפי סדר הופעתן):
  • הגדרת את c כמספר שלם (int) במקום כתו (char). שנה ל: char c
  • בהוראות התרגיל, כתוב שעליך להפריד בין המספר ליחידה ע"י רווח. הפרדת אותם ע"י פסיק (%f,%c). שנה ל: %f %c
  • משפט התנאי הראשון (if) יתבצע כל עוד לפחות אחד מהתנאים לא יתקיים, ולכן התכנית לעולם לא תעבוד לך. תשנה את ההאופרטור או (||) לאופרטור וגם (&&).
  • שגיאה נוספת שנמצאת במהלך כל התכנית שלך היא שלא תחמת את התווים בגרש. למשל, במשפט ה-if הראשון כתבת c=f, כשלמעשה היית צריך לכתוב c='f'
להלן תכנית מתוקנת ומשופרת:


חזרה לתחילת העמוד הצג את כרטיס החבר של כפיר חפש הודעות אחרות של כפיר בקר בדף הבית של כפיר
 
yehouda
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 28 November 2008
מדינה: Israel
משתמש: מנותק/ת
הודעות: 66
נשלח בתאריך: 29 November 2008 בשעה 17:13 | IP רשוּם
ציטוט yehouda

תודה רבה אבל טרם הגענו לנושא ה- SWITCH
האם זה יהיה אסון אם אכתוב את זה בIF או ELSE ?

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

אני ניסתי לבצע את פעולת הכפל אבל אז נוצר מצב של התנגשות

FLOAT *INT והבנתי שחלק מהנתונים אובדים.

אשמח למענה נוסף תודה ...

ד"א אתה גם סטודנט ?

חזרה לתחילת העמוד הצג את כרטיס החבר של yehouda חפש הודעות אחרות של yehouda
 
כפיר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 November 2008 בשעה 18:38 | IP רשוּם
ציטוט כפיר

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 November 2008 בשעה 18:45 | IP רשוּם
ציטוט כפיר

דבר נוסף ששכחתי לציין.

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

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


הצטרף / הצטרפה: 28 November 2008
מדינה: Israel
משתמש: מנותק/ת
הודעות: 66
נשלח בתאריך: 29 November 2008 בשעה 21:04 | IP רשוּם
ציטוט yehouda

כפיר הכוונה שלך הינה :

לשים גרש לפני המשתנה C

if (`c`==m

ואז זה יבדוק כל פעם את התו הנבדק ?

חזרה לתחילת העמוד הצג את כרטיס החבר של yehouda חפש הודעות אחרות של yehouda
 
כפיר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 November 2008 בשעה 21:48 | IP רשוּם
ציטוט כפיר

עליך לסמן בגרש את התו הנבדק, ולא לסמן את המשתנה עצמו. כלומר, תחום בגרשים (לא גרשיים!) את m, i, y ו-f.
חזרה לתחילת העמוד הצג את כרטיס החבר של כפיר חפש הודעות אחרות של כפיר בקר בדף הבית של כפיר
 
yehouda
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 28 November 2008
מדינה: Israel
משתמש: מנותק/ת
הודעות: 66
נשלח בתאריך: 29 November 2008 בשעה 22:23 | IP רשוּם
ציטוט yehouda

תודה סיימתי לכתוב את התכנית אבל היא עובדת חלקית אשמח לדעת מהי הטעות שלי#include <stdio.h>
float  main ()

{
 float f, y, m, i,x;
    char  c;

  
 printf("use those value after the number, f=30.48,y=91.44,m=100,i=2.54");
 printf("enter number with prefix(f,y,m,i) \n");
 
     scanf("%f %c" ,&x,&c);

  if (x<=0)
   return  0;
  else

  if (!(c='f')&&!(c='y')&&!(c='m')&&!(c='i')) //*verify that user enter value correctlly*//
 
return 0;
  
 
   else

   if (c='f')  {    
             f=30.48;
  x*=f;
  printf("%.2f" ,x);
    }
   
else
if (c='y')  {   
 y=91.44;
  x*=y;
  printf(" %.2f" ,x);
}
    
 else  

  
  if (c='m') {    
   m=100;
  x*=m;
  printf("%.2f" ,x);
  }
   else

    if (c='i')  {   
     i=2.54;
  x*=i;
  printf("%.2f" ,x);}
return 0;
}

 

חזרה לתחילת העמוד הצג את כרטיס החבר של yehouda חפש הודעות אחרות של yehouda
 
כפיר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 29 November 2008 בשעה 22:53 | IP רשוּם
ציטוט כפיר

אחת הבעיות הנפוצות והקטלניות ביותר אצל מתכנתים מתחילים, היא ששמים את הסימן שווה במקום אופרטור ההשוואה (במשפטי התנאי). התכנית שלך צריכה להראות כך:

חזרה לתחילת העמוד הצג את כרטיס החבר של כפיר חפש הודעות אחרות של כפיר בקר בדף הבית של כפיר
 
yehouda
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 28 November 2008
מדינה: Israel
משתמש: מנותק/ת
הודעות: 66
נשלח בתאריך: 29 November 2008 בשעה 23:33 | IP רשוּם
ציטוט yehouda

תודה רבה ולילה טוב זה הצליח.....
חזרה לתחילת העמוד הצג את כרטיס החבר של yehouda חפש הודעות אחרות של yehouda
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה