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

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


samerk

Recommended Posts

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

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

אם בכל מקרה אתה מתעקש אז גם אין בעיה, זה יהיה די פשוט:

אז מצאת את המינ' והמקס', כלומר הם שמורים לך במשתנים min, max.

עכשיו אתה יכול לעבור שוב על ארבעת המשתנים, ולשמור את הראשון שתיתקל בו שנמצא בין המינ' למקס', ואז את השני (תשים לב שהם צריכים להימצא בין המינ' למקס' במובן החלש, אחרת תיפול על מקרה קצה). נקרא למשתנים בהם שמרת אותם b ו-c.

כשסיימת עם זה, תשווה בין b ל-c.

אם b גדול מ-c תדפיס את המשתנים בסדר max, b, c, min.

אחרת, תדפיס את המשתנים בסדר max, c, b, min.

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

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

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

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

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

מה הבעיה להתעלם ממנו?

אם אתה יודע מי המשתנה הכי גדול,

אל תשים אותו בהשוואה בין השלושה האחרים

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

יש ארבע אפשרויות למי הכי גדול, נכון?

שים ארבעה IF - לכל אחד מהמצבים האלה - כך שכל אחד מהם ילכוד את אחת האפשרוית

בתוך כל אחד מארבעת ה-IF האלה, אתה נמצא ב-"עולם" שבו אתה יודע מי הכי גדול,

ונשאר לך לפענח רק את השלושה האחרים

יתר המלאכה דומה

קפיש?

זה גם לא בהכרח יהיה הכי יעיל, אבל זה יעבוד

אמרתי לך כבר שבמקום לנסות לפתור את הבעיה ב-"תיכנות", תנסה לפתור אותה על דף

קח ארבע כוסות שמסומנות מ-A עד D

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

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

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

אתה יודע לפתור את הבעיה הזו? האם אתה יודע/יכול לנסח לה פתרון כללי שבכל מצב שלא יהיה (= כלומר, לא משנה איזה מטבעות אני אשים מתחת לאיזה כוס) אתה תדע לפתור את הבעיה במינימום צעדים?

אחרי שתפתור את הבעיה הזו,

נוכל לעזור לך לתרגם אותה לקוד מחשב

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

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

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

בשיטת העץ עשיתי את זה אבל זה לקח משהו כמו 280 שורות של קוד (זה אמיתי) וזה עבד ללא בעיות בכל המצבים אבל אני לא חושב שהמרצה ישמח לראות את זה.

ציפיתי לשיטה יותר קצרה.

בכל מקרה תודה

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

#18עשיתי את זה אבל זה נופל במצבים ששני ערכים שווים

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

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

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

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

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

סידרתי את זה עם לולאה בסוף.

תודה בכול זאת.

max1 = r;

max2 = t;

max3 = n;

max4 = f;

max1c = 'R';

max2c = 'T';

max3c = 'N';

max4c = 'F';

for (i=0;i<4;i++)

{

if (max4 > max3)

{

max4 = max4+max3;

max3 = max4-max3;

max4 = max4-max3;

max4c = max4c+max3c;

max3c = max4c-max3c;

max4c = max4c-max3c;

}

if (max3 > max2)

{

max3 = max3+max2;

max2 = max3-max2;

max3 = max3-max2;

max3c = max3c+max2c;

max2c = max3c-max2c;

max3c = max3c-max2c;

}

if (max2 > max1)

{

max2 = max2+max1;

max1 = max2-max1;

max2 = max2-max1;

max2c = max2c+max1c;

max1c = max2c-max1c;

max2c = max2c-max1c;

}

}

printf("\n1. %c %d",max1c, max1);

printf("\n2. %c %d",max2c, max2);

printf("\n3. %c %d",max3c, max3);

printf("\n4. %c %d",max4c, max4);

}

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

ארכיון

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

×
  • צור חדש...