עבור לתוכן

בדיקת ספרת אלפים מאות וכד'

Featured Replies

פורסם

בוקר טוב,

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

יש לי את הגדרת האותיות המקבילות ל-1000 500 וכו'.

השאלה היא איך לפרק את המס' שהתקבל ע"י המשתמש ולתרגם לפלט של אותיות

עזרה בבקשה.

פורסם

עם איזו שפה אתה עובד? TCL, PERL, PASCAL, ASEMBEL?

אההה הבנתי, אנחנו אמורים לנחש לבד.

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

פורסם
  • מחבר

visual c++

בכל מקרה אתה מתכוון למודולו?

זא"מ קיבלתי את המס' 2500 הפלא יראה כ-MMD

אז איך אני יודע שיש לי שני אלפים וכן הלאה

פורסם

באופן כללי זה אמור להיראות ככה


int achadot, asarot, meot, alafim;
int num = 2500;

achadot = num %10;
num = num /10;

asarot = num %10;
num = num /10;

meot = num %10;
num = num /10;

alafim = num %10;

זה כמובן בצורה בסיסית.

פורסם
  • מחבר

הבנתי מה כוונתך אבל עוד שאלה, המשתמש מזין קלט לדוג'1078 התכנית צריכה לפרק את המס'

להפלא יראה כך:MLXXVIII

M=1000

L=50

X=10

V=5

I=1

זה הקושי שלי להבין את הנושא של איך התכנה תבין באמת כמה אלפים כמה מאות וכמה אחדות אם יש בכלל מס' בגודל כזה[br]פורסם בתאריך: 20.11.2008 בשעה 08:34:52


טוב, ניסיתי את הרעיון שלך והוא עובד חלקית ז"א הצלחתי לפרק את המס' והפלט הראה באמת אותו מס' שהוקש עכשיו כנראה אני צריך צובר לכל ספרה אלפים מאות וכו כדי שיוציא כפלט את המס' הרומי הנכון, איך אני משנה זאת?

#include <stdio.h>

int main()

{
int num,i_ac=0;
int achadot=0,asarot=0,meot=0,alafim=0;
int M=1000,D=500,C=100,L=50,X=10,V=5,I=1;

printf("Enter Natural Number\n");
scanf("%d",&num);


if (num <= 5000)
{
achadot = num % 10;
num = num / 10;

asarot = num % 10;
num = num / 10;

meot = num % 10;
num = num / 10;

alafim = num % 10;

printf("%d%d%d%d\n",alafim,meot,asarot,achadot);
}
else
printf("Error Please Enter Numbers Under 5000\n");

}

פורסם

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

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

הינה זה אמור לעשות ישירות


int num = 2500;
char romi[100] = '';
int i = 0;
while (num > 0) {
if (num >= 1000) {
romi[i] = 'M';
num = num - 1000;
romi[ ++i ] = 0;
continue;
}
if (num >= 900) {
romi[i] = 'C';
romi[++i] = 'M';
romi[++i] = 0;
num = num -900;
continue;
}
if (num >= 500) {
romi [i] = 'D';
romi[++i] = 0;
num = num -500;
continue;
}
if (num >= 400) {
romi[i] = 'C';
romi[++i] = 'D';
romi[++i] = 0;
num = num -400;
continue;
}
if (num >= 100) {
romi [i] = 'C';
romi[++i] = 0;
num = num -100;
continue;
}
if (num >= 90) {
romi[i] = 'x';
romi[++i] = 'C';
romi[++i] = 0;
num = num -90;
continue;
}
if (num >= 50) {
romi [i] = 'L';
romi[++i] = 0;
num = num -50;
continue;
}
if (num >= 40) {
romi[i] = 'X';
romi[++i] = 'L';
romi[++i] = 0;
num = num -40;
continue;
}
if (num >= 10) {
romi [i] = 'X';
romi[++i] = 0;
num = num -10;
continue;
}
if (num >= 9) {
romi[i] = 'I';
romi[++i] = 'X';
romi[++i] = 0;
num = num -9;
continue;
}
if (num >= 5) {
romi [i] = 'V';
romi[++i] = 0;
num = num -5;
continue;
}
if (num >= 4) {
romi[i] = 'I';
romi[++i] = 'V';
romi[++i] = 0;
num = num -4;
continue;
}
if (num >= 1) {
romi [i] = 'I';
romi[++i] = 0;
num = num -1;
continue;
}
}


פורסם

פתרון סבבה. מאוד ישיר.

רק כמה הערות:

א. למה להשתמש ב-continue, במקום פשוט לעשות else if?

ב. למה כל פעם להציב 0 בסוף, ולא פשוט להציב 0 בסיום הלולאה? זו סתם עבודה מיותרת.

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

פורסם

ואם אתה לא יודע איזה מספר זה ומבקשים ממך לעשות לו פסיקים ? 1000 1,000?

מי שמצליח מקבל ממני שקל..

ארכיון

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

דיונים חדשים