עבור לתוכן

תרגיל פשוט , אבל הסתבכתי :) ..

Featured Replies

פורסם

קלט - הכנס מספר (במילימטרים )

ומוציאים פלט כך

ק"מ :

מטרים :

סנטימטר :

מילימטר :

תודה לעונים .

כלומר ק"מ + מטרים +סנטי + מילי = לקלט שהוכנס

פורסם

מה הבעיה...

לא משנה באיזו שפה זה דבר פשוט.... קח את מספר הק"מ תכפיל ב-1000 עכשיו יש לך את מספר המטרים, תכפיל ב-100 עכשיו יש לך את מספר הס"מ, תכפיל ב-10 עכשיו מס' המילימטרים...

פורסם
  • מחבר

לא הכוונה היא . נגיד הכנסתי מספר כזה 57654362576349875634734809

צריך לצאת פלט :

ק"מ : כך וכך

מטרים : כך וכך :

סנטי : כך וכך

מילימטרים : כך וכל

לדוגמא 5000500 (מילימטרים )

ק"מ : 5

מטרים :50

סנטימטרים : 0

מילימטרים : 0

פורסם

תכיר את החבר החדש שלך, מודולו.

פורסם
  • מחבר

את הקוד לכתוב זה לא יהיה בעיה ,

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

אם מישהו יכתוב לי אלגוריתם פשוט לפתרון אשמח .

פורסם

אתה מחלק (חילוק אינטג'רי) את הנתון ב1000000 (נדמה לי) כי לקבל את מס הקילומטרים, מחסיר את המס' המילימטרים שהלכו לקילומטרים (1000000 * מס קילומטרים) מהנתון ומחשב את המטרים והסנטימטרים באותה דרך..

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

פורסם

תעשה את החישוב לפי

מילימטרים=סנטימטרים*10

סנטימטרים=מטרים*100

ק"מ=מטרים*1000

ובעקרון החישוב שאתה צריך לעשות הפוך

עם מודולו, ואז תקבל את התוצאות כל פעם...

פורסם

*

פורסם

כעיקרון כל מה שאמרו לך הוא נכון, אבל אני מניח שאתה די חדש בתחום התיכנות, אז אנסה להעמיק מעט יותר:

פעולת מודולו היא הפעולה שמחזירה שארית של חלוקה בשלמים. למשל: 5 מודולו 3 שווה ל-2. תוצאת החילוק (בשלמים) היא 1 והשארית היא 2.

דוגמה נוספת 18 מודולו 3 שווה 0 (אין שארית) 20 מודולו 3 שווה 2 וכו'.

וכעת כיצד זה אמור לעזור לך לפתרון התרגיל:

כאשר הקלט הוא מספר שלם במילימטרים, כדי למשל "לסנן" רק את המלימטרים מתוך כל האורך הנתון ניתן להשתמש ב-X מודולו 10 (כאשר X הוא הקלט בתוכנית).

הסיבה דווקא לבחירת 10 היא שסיפרת העשרות כבר מהווה סנטימטרים. שלב הבא, לסינון מספר הסנטימטרים אפשר (לא הכרחי) להחסיר תחילה את מספר המילימטרים שקיבלת קודם מ-X, ולחלק את התוצאה (אותה אמשיך לכנות X) ב-10. X כעת הוא למעשה האורך בסנטימטרים. המידה הבאה שאתה צריך לסנן היא מטרים, ומכיוון ש100 סנטימטרים הם כבר מטר אחד, עליך לחשב את תוצאת X מודולו 100, כדי לסנן את הסנטימטרים בלבד (מספר הקטן ממטר בודד). ובאופן זה להמשיך הלאה עד ליחידת המידה האחרונה אותה עליך לפלוט.

אינני יודע באיזו שפה אתה צריך להשתמש כדי לממש את התוכנית, אך ב-C למשל אופטור המודולו הינו אופרטור בינארי (פועל על שני ארגומנטים) ומיוצג עי" הסימן אחוז. לדוגמה: ערך הביטוי: 5%3 הוא 2.

בצורה אלגוריתמית (X הוא הקלט):

1. NumOfMm=X mod 10

2. X=(X-NumOfMm)/10

3. NumOfCm=X mod 100

4. X=(X-NumOfCm)/100

5. NumOfM=X mod 1000

6. X=(X-NumOf)/1000

7. NumOfKm=X

פורסם
  • מחבר

תודה לכל המגיבים :):xyxthumbs:

פורסם

אין בהכרח טעם לבצע החסרה של המספר הקודם ואז חלקי 10

ברוב השפות יש את המקביל לMOD שנקרא DIV - שהוא נותן את המספר חלקי המספר הרצוי בלי השארית משמע אם היית מחלק

5 DIV 2 = 2

ובC זה בעצם חלקי או "/"

אז אחרי כל MOD או % בC שתעשה

תצטרך לעשות

X=X/10 (או) X/=10

(וכמובן, 10 או 100 או 1000 לפי הצורך

פורסם
  • מחבר

 # include <stdio.h>
int main ()
{
unsigned long x,km,m,cm,mm ;
printf("enter a number :");
scanf("%u",&x);
km = x/1000000;
x =x%1000000;
m= x/1000;
x=x%1000;
cm =x/10;
x=x%10;
mm=x;
printf("\n km: %u ",km);
printf("\n m: %u ",m);
printf("\n cm: %u ",cm);
printf("\n mm: %u ",mm);
getchar();
return 0;
}

ניסיתי לכתוב את התוכנית ב C

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

ואני לא מגיע ל getchar שיעצור את התוכנית , והחלון דוס\קונסול ישר נסגר ,מה הבעיה ? תודה .

עריכה : ב CMD התוכנית עובדת טוב (אין שגיאה ) למה getchar לא עובד ?

פורסם

תוסיף

flushall();

לפני הקריא ל GETCHAR.

מכיוון ש ה ENTER שהקלדת נשמר ב BUFFER, ה GETCHAR קורא משם. ה "פלאש" מנקה את החוצץ, ו GETCHAR מחכה להקלדה חדשה ( בעקרון ).

GETCH גם יכל לעבוד, אפילו בלי ניקוי של החוצץ.

אבל אלה פתרנות עוקפים, הפונקציות האלה לא בנויות לעבוד בסביבת עבודה של WIN.

פורסם
  • מחבר

תודה על ההסבר :)

עכשיו סוף סוף אני מבין למה זה ככה .

ארכיון

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

דיונים חדשים