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

שפת C - בדיקת זוגיות/אי זוגיות ספרות של מספר


sharonp

Recommended Posts

אהלן!

אני רוצה לכתוב תכנית שתקלוט מספר שלם למשל 1234 ותבדוק את הזוגיות / אי-זוגיות של כל אחת מהספרות שמרכיבות את המספר.

למשל כאן:

1 - אי זוגי

2 - זוגי

3 - אי זוגי

4 - זוגי

כל מספר זוגי מבחינתי שווה 1+ נקודה וכל אי-זוגי 1- נקודה, לכן הניקוד של המספר 1234 הוא 0.

יש רעיונות איך אני יכול לעבור סיפרה סיפרה? (אני לא יודע מראש את גודל המספר. זה יכול להיות 1234 וזה יכול להיות 983768903)

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

זה די פשוט, יש לך הרי אופרטור של שארית. תשתמש בו כל פעם על המספר שהוא INTEGER, וחשב את הMODULU 10, שהוא ספרת האחדות שלך. אותה תעשה מודולו 2, קיבלת 0 תוסיף 1 למשתנה צובר, קיבלת 1 תוריד 1 מהצובר. חלק את המשתנה ב10, ותחזור על התהליך עד שהמספר שווה ל0.

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

תודה על העזרה חברים!

ירח , לא הבנתי חצי ממה שכתבת ???

a זה המספר למשל 1234? למה return 0? אפס הוא מספר זוגי בעקרון.

והכי חשוב - z= (a & 1) ? -1 : 1;

לא הבנתי מה קורה כאן. אני בכלל לא מכיר כזה אופרטור של סימן שאלה

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

כי הרקורסיה צריכה לעצור איפשהו. תחשוב שהקוד יהיה:

if (a==0) return 1;

אז מה תהיה תוצאת הפעלת הפונקציה על המספר 5?

חוץ מזה, הפעולה לא ממש מוגדרת היטב על 0, כי טכנית אין לו ספרות בכלל.

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

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

sharonp,

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

כך הייתי כותב את זה:

#include<stdio.h>

void main()
{
int num, digit;



printf("Enter an integer number...\n");
scanf("%d", &num);

do
{
digit=num%10;
(digit%2==0)?printf("%d is even.\n", digit):printf("%d is odd.\n", digit);
num=num/10;
}while (num>0);


}

ניסיתי לקמפייל וזה עבד לי.

עריכה...

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

הנה הקוד המתוקן:


#include<stdio.h>

void main()
{
int num, digit, sum=0;



printf("Enter an integer number...\n");
scanf("%d", &num);

do
{
digit=num%10;
if (digit%2==0)
{
printf("%d is even.\n", digit);
sum++;
}
else
{
printf("%d is odd.\n", digit);
sum--;
}

num=num/10;
}while (num>0);

printf("Number total score is %d", sum);
}

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

שים לב כי אם תקח 1 פחות פעמיים השארית של כל ספרה מודולו 2, תקבל את ה"ניקוד" שלה. לכן, הנה קוד אלגנטי לחישוב מהיר של הניקוד הכולל של המספר:

int main()
{
int input, digit, score=0;
printf("Enter a number:\n");
scanf("%d",&input);
while (input!=0)
{
score+=1-2*((input%10)%2);
input=input/10;
}
printf("Number's score is: %d.\n",score);
}

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

ארכיון

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

×
  • צור חדש...