ABA


"צריך עזרה בשאלה ב C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10344 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10344
Adiga
חבר מתאריך 22.9.09
3548 הודעות
   18:06   08.04.11   
אל הפורום  
  צריך עזרה בשאלה ב C  
 
   זאת השאלה:
כתבו תוכנית שתבקש ותקלוט מספר שלם unsigned long.
עבור כל ספרה המופיעה בו - התוכנית תדפיס כמה פעמים היא מופיעה.
עבור ספרות שאינן מופיעות בו – לא יודפס דבר.


אני לא יודע איך לגשת לשאלה בכלל:
1. המספר הנקלט יכול להיות בין 0 ל 9 ספרות.
איך אני יכול לפתור את הבעיה של החלוקה לספרות בודדות ?
כלומר אני לא יודע איזה מספר השמתמש מקליד וכמה ספרות יש לה אז אם אני
נגיד ניגש לחלוקה מצד ימין ומתחיל לפרק שם עדיין יהיו לי ספרות שהוא יראה אותם כ 0

זה מה שאני כתבתי
digit1= un_lng%10;
digit2= (un_lng/10)%10;
digit3= (un_lng/100)%10;
digit4= (un_lng/1000)%10;
digit5= (un_lng/10000)%10;
digit6= (un_lng/100000)%10;
digit7= (un_lng/1000000)%10;
digit8= (un_lng/10000000)%10;
digit9= (un_lng/100000000);

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


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא הבנתי למה כל המשתנים של הdigits שעשית? חומוס 08.04.11 20:16 1
  מאד פשוט Net_Boy  09.04.11 00:18 2
     היה אסור להשתמש במערך כי זה לא נלמד עדיין. Adiga 09.04.11 01:19 4
  תודה לכם בסוף עשיתי את זה בללואת Adiga 09.04.11 01:18 3
     אם כבר מתקמצנים על זכרון לטובת זמן ldan192  09.04.11 13:00 6
  יכלת לממש את מה שנאמר לך פה עם המערך Yariv-H 09.04.11 01:51 5

       
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק, 6 נקודות
   20:16   08.04.11   
אל הפורום  
  1. לא הבנתי למה כל המשתנים של הdigits שעשית?  
בתגובה להודעה מספר 0
 
אם המספר הוא באורך 80 ספרות, מה תעשה?

אגב מותר לך להשתמש במערך? כי אם כן, אז זה נורא פשוט


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק, 2 נקודות
   00:18   09.04.11   
אל הפורום  
  2. מאד פשוט  
בתגובה להודעה מספר 0
 
   תעשה מערך בגודל 10
כל אינדקס, מייצג ספרה.

ואז אפשר לעשות משהו כזה:

void FillArray(unsigned long num, int arr[10])
{

// Set the array to zero
memset(arr, 0, 10*sizeof(int));

// If our number is zero, set the first index to one and return.
if(num == 0)
{
arr[0] = 1;
return;
}

// Check every right digit (until the number reaches zero)
while(num != 0)
{
++arr[num % 10];
num = num \ 10;
}
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Adiga
חבר מתאריך 22.9.09
3548 הודעות
   01:19   09.04.11   
אל הפורום  
  4. היה אסור להשתמש במערך כי זה לא נלמד עדיין.  
בתגובה להודעה מספר 2
 
   מצטער שלא ציינתי אבל תודה בכל זאת על העזרה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Adiga
חבר מתאריך 22.9.09
3548 הודעות
   01:18   09.04.11   
אל הפורום  
  3. תודה לכם בסוף עשיתי את זה בללואת  
בתגובה להודעה מספר 0
 
   DO WHILE ו SWITCH בתוכו.

DO WHILE ותנאי עד שהמספר שאני מחלק אותו ב 10 כדי להקטין אותו
while(un_lng>0);

וסוויץ שמתפקד כ COUNTER לשאריות שאני מחשב עם CASE 0-9

איך אני עושה ציטוט כדי לשים את הקוד שכתבתי ? כמו שאתם עשיתם ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   13:00   09.04.11   
אל הפורום  
  6. אם כבר מתקמצנים על זכרון לטובת זמן  
בתגובה להודעה מספר 3
 
אז כבר מבזבזים על לולאות במקום להשתמש ב-10 משתנים.

// given unsigned long number;

for (int i=0; i<10; ++i) {
unsigned long temp = number;
int count = 0;
do {
if (temp % 10 == i) ++count;
} while (temp /= 10);
printf("The digit %d appears %d times\n", i, count);
}

לא בדקתי קומפילציה, אבל בגדול מאמין שתבין את הרעיון


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק, 2 נקודות
   01:51   09.04.11   
אל הפורום  
  5. יכלת לממש את מה שנאמר לך פה עם המערך  
בתגובה להודעה מספר 0
 
   רק עם 10 משתנים.
וכול פעם להעלות את המשתנה בהתאם.

יותר מיזה הייתה יכול להשתמש ב
Switch

ולכול Case לשייך את שם המשתנה של הסיפרה עם ++



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net