הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה במיון ספרות (https://hosts.co.il/forums/showthread.php?t=74338)

Xinxy 08-05-09 17:07

עזרה במיון ספרות
 
היי אני צריך עזרה במיון ספרות
יש לי את הבעיה הבאה:
בנה תוכנית אשר תמיין את הספרות במספר מהקטן לגדול
לדוגמא:
Enter number: 2974
The number: 2479

אסור להשתמש במערכים, מותר רק לולאות..

הבעיה כאן שאני לא יודע כל כך איך בכלל להתחיל את זה
אז אם מישהו יתן לי כיוון אני יודה לו מאוד

תודה

daMn 08-05-09 17:16

באיזה שפה?
בעיקרון אתה יכול ללכת באופן רקורסיבי, כי אתה לא יודע באיזה גודל המספר, וחלק כל פעם ב10 וככה לבודד את המספר ואז לעבור במיון בועה או איך שזה לא נקרא שמחליף מיקומים סמוכים אם השני גדול מהראשון.

בניה 08-05-09 17:18

המספר חייב להיות 4 ספרתי?

דור 08-05-09 17:18

המספר שאתה קולט , אתה קולט אותו כSTRING או כINT/DOUBLE?

ועוד שאלה , האם המספר חייב להיות דו ספרתי ? "הנחה"?

עריכה: ראיתי את התגובה שלך, אני אנסה עכשיו
למדת רקורסיה?

Xinxy 08-05-09 17:27

המספר יכול להיות בכל גודל שהוא, הייתי צריך לציין את זה
לדוגמה
35326543
נקבל
23334556

והשפה היא C
אם אפשר גם איזה רעיון עם PHP זה יכול לעזור

תודה :}

דור אני קולט אותו כINT וגם לא למדתי רקורסיה

דור 08-05-09 17:34

פיתרון
 
היי ,
זה בשפת סי שארפ
אולי תבין

עשיתי מהר כי אני ממהר לבית כנסת
*יכול להיות שיש דרך יותר יעילה
*אם למדת רקורסיה אחר כך אני אגיד לך מה צריך לעשות

קוד:

                static void Main(string[] args)
                {
                        int num=12692;
                        double ezer=Math.Pow(10,getnumofdigits(num)-1);
                        double newNum=0;
                        while (num>0)
                        {
                                newNum+= (num%10)*ezer;
                                num=num/10;
                                ezer=ezer/10;

                        }
                        Console.WriteLine(newNum);
                }
                public static int getnumofdigits(int num)
                {
                        int count=0;
                        while (num>0)
                        {
                                count++;
                                num=num/10;
                        }
                        return count;
                }


Xinxy 08-05-09 17:45

ציטוט:

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

עשיתי מהר כי אני ממהר לבית כנסת
*יכול להיות שיש דרך יותר יעילה
*אם למדת רקורסיה אחר כך אני אגיד לך מה צריך לעשות

קוד:

                static void Main(string[] args)
                {
                        int num=12692;
                        double ezer=Math.Pow(10,getnumofdigits(num)-1);
                        double newNum=0;
                        while (num>0)
                        {
                                newNum+= (num%10)*ezer;
                                num=num/10;
                                ezer=ezer/10;

                        }
                        Console.WriteLine(newNum);
                }
                public static int getnumofdigits(int num)
                {
                        int count=0;
                        while (num>0)
                        {
                                count++;
                                num=num/10;
                        }
                        return count;
                }


התוכנית שלך לא עובדת טוב
זה נותן 29621 במקום 12269

תודה על הניסיון לעזור

דור 08-05-09 17:47

אה,
סליחה... חשבתי מספר הפוך

מצטער...
כשאחזור אכתוב לך

eilon11 08-05-09 18:03

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

int maxnum=0;
while(num<0)
{
if(num%10>maxnum)
maxnum=num;
num=num/10;
}


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

sholaman 08-05-09 21:54

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


כל הזמנים הם GMT +2. הזמן כעת הוא 15:35.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ