בדיקת ספרת אלפים מאות וכד' - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


efod26

Recommended Posts

בוקר טוב,

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

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

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

עזרה בבקשה.

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

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

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

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

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

הבנתי מה כוונתך אבל עוד שאלה, המשתמש מזין קלט לדוג'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 וכו' ומערכים שמחזיקים את הערכים שלהם בספרות רומיות).

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

ארכיון

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

×
  • צור חדש...