סידור משתנים מהגדול לקטן בשפת c - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

סידור משתנים מהגדול לקטן בשפת c


samerk

Recommended Posts

שלום,

יש לי קטע קוד בשפת c ואני צריך לסדר ארבעה משתנים מסוג int לפי הערך שלהם מהגדול ביותר לקטן ביותר לפי הסדר.

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

אשמח אם תעזרו לי עם זה.

תודה מראש

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

שוב, אם תציב אותם במערך, יהיה לך יותר קל אם תמיין אותם.

במקרה אחר, תוכל תוכל להציב במשתנה עם הערך הכי נמוך שמצאת להציב מספר גבוה (את ההכי גבוה שנית לשים ב-int למשל)

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

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

אשמח אם תראו לי דוגמאות.

אני צריך שידפיס לי בסוף בצורה הזאת.

1. (שם המשנה) (ערך המשתנה).

2. (שם המשנה) (ערך המשתנה)

3. (שם המשנה) (ערך המשתנה)

4. (שם המשנה) (ערך המשתנה)

שאחד זה הכי גדול וארבע זה הכי קטן.

שוב אני לא יודע מה יהיה ערך המשתנים זה תלוי בקלט.

אשמח אם תראו לי בקוד.

תודה מראש

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

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

אתה צריך לטפל בזהים?

אתה בכלל יכול להשתמש במערכים?

אם כן: http://www.programmingsimplified.com/c/source-code/c-program-bubble-sort

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

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

- - - תגובה אוחדה: - - -

אני עוד לא למדתי את זה, מה שהבנתי מהמרצה זה שצריך לעשות את זה עם if-ים

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

קודם כל תכתוב משהו שמקבל את הכל ומדפיס את המשתנים שיש לך.

נגיד תקרא להם A B C D ותראה שאתה מקבל את כולם ויוצא לך מה שרצית.

אתה צריך לצייר עץ אפשריות שייתן לך את המבנה של ה IF (יעזור לך להבין).

בעקרון תחפש את הכי גדול ובתוכו תחפש את השני ואז את השלישי והרביעי כבר שם :)

אני לא רואה כרגע דרך יפה לכתוב את זה :)

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

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

(בד"כ האיברים כבר יבואו במערך או במבנה דומה כלשהו.)

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

הנה מימוש לדוגמה: http://www.cprogramming.com/tutorial/computersciencetheory/sorting1.html (תשים לב שאתה רוצה למיין את המשתנים בסדר הפוך מהמקובל, אז או שתצטרך להתאים טיפה את הקוד, או שתמיין כרגיל (אפילו עדיף) ואחר-כך תדפיס את המערך מהסוף להתחלה).

הנה גרסא קצת יותר מסודרת של הקוד הנ"ל: http://pastebin.com/9PwtssqT.

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

הערה: במימוש שהבאתי (שזה סתם קוד שמצאתי בגוגל) אין את ה-"limit" שיש בסרטון, ואז נוצר מצב שהאלגוריתם סתם עושה צעדים מיותרים, וזה די מטומטם (לא שזה משנה עבור מספר כזה קטן של איברים). אפשר בקלות רבה מאוד (ע"י הוספת שני תווים) להוסיף את השיפור שהזכרתי לקוד הנ"ל.

עריכה:

אני רואה שאתה רוצה להדפיס גם את שמות המשתנים.

מבחינת העיקרון זה יישאר בדיוק כמו שרשמתי. מבחינת המימוש זה קצת יכער את הקוד, לפחות ב-C.

בנוסף, אם במקום אלגוריתם מיון סטנדרטי אתה רוצה להשתמש ב-if-ים אז זה יצא די מסורבל (אפשר להוכיח שכדי למיין ככה מספיק לבצע 5 השוואות, זה קשור לעץ ש-Ligi הזכיר). במקרה בשביל 4 איברים זה עוד סביר.

אם אתה רוצה רמז לגבי איך עושים את זה אז ככה: בהינתן ארבעה איברים a, b, c, d, תמיין את a ו-b בנפרד ואת c ו-d בנפרד ("תמיין" = תבין מי הגדול מבין השניים). כדי לעשות את זה מספיקות שתי השוואות (שני if-ים). אח"כ זה די פשוט.

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

אני לא מבין למה אתה מסתבך (במיוחד אם עוד לא למדת מערכים ואם הורו לכם בפירוש להשתמש ב-IF) :

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

מה היית עושה?

היית משווה כל סכום לכל סכום אחר, נכון?

וגם ברור לך שהיית יכול לעשות "קיצור דרך", נכון?

כי אם סכום A קטן מסכום B וסכום B קטן מסכום C,

לא יכול להיות שסכום C קטן מ-A, נכון?

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

תבנה את האלגוריתם הזה על דף

ואז פשוט תתרגם את זה לקוד

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

אני כבר אמרתי שאני יודע איך למצוא את הראשון ואת האחרון.

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

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

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

ארכיון

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

×
  • צור חדש...