שאלה בC

srn007

New member
שאלה בC

אני צריך לכתוב תכנית שתהפוך כל מספר טבעי עד 5000 לכתב רומי.
למשל עבור קלט 1078 פלט יהיה: MLXXVIII
(I = 1 , V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000)

מישהו יכול לתת לי רעיון באיך להתחיל את התכנית??

תודה מראש
 

BravoMan

Active member
תוכנית ב-C מתחילים בצורה די סטנדרטית:

#include <stdio.h>

int main(int argc, char* argv[])
{
/* put your code here */
return 0;
}


אבל אני מניח שמה שבאמת רצית לשאול הוא איך לפתור את השאלה, כלומר, איך להמיר מספר מספרות ערביות לספרות רומיות.

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

אני אתן לך רמז: התרגיל הזה ידרוש פירוק של המספר ע"י חלוקה ומודולו (שארית).
 

srn007

New member
הצלחתי לפתור את התרגיל, אבל...

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

M=num/1000;
for(i=0 ; i<M ; i++)
printf("%d", M);
rem=num%1000;


למשל, אם המספר שבחרתי הוא 2568, הוא מדפיס את האלפים בצורה של 11 במקום MM.
אתה יכול לתת רעיון איך לשנות את זה??

תודה מראש!!
 

BravoMan

Active member
זה חלק מהתרגיל:

אין פקודה מוכנה שאומרת "תדפיס ספרה רומית".
אחרת כל התרגיל הזה היה חסר משמעות.

אם אתה רוצה שהתוכנה תדפיס את הספרה הרומית (M (1000 אתה צריך למעשה להורות ל-printf להדפיס את האות האנגלית M (אם גדולה).

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

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

srn007

New member
עדיין לא למדתי מחרוזות

אבל הצלחתי לפתור את התרגיל על ידי כך שהחלפתי את הפקודה printf בפקודה putchar.

תודה על העזרה
 
למעלה