נושא: צריך עזרה בסידור נתונים בסדר עולה
|
|
כותב |
|
kfirfer משתמש מתחיל
הצטרף / הצטרפה: 03 March 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 14
|
נשלח בתאריך: 11 December 2013 בשעה 18:48 | | IP רשוּם
|
|
|
|
מה שרשמתי מורכב וחסר תועלת, מה הדרך הנכונה ?
קוד:
// קרא 3 נתונים והדפס אותם ממוינים בסדר עולה
#include <stdio.h>
int main()
{
int a,b,c,d;
scanf_s("%d%d", &a, &b);
if (a > b)
{
d = a;
a = b;
b = d;
}
scanf_s("%d", &c);
if (b > c)
{
d = c;
c = b;
b = d;
}
if (a > b)
{
d = a;
a = b;
b = d;
}
printf("%d%d%d\n", a, b, c);
return 0;
}
|
|
|
|
חזרה לתחילת העמוד |
|
|
חיימקה משתמש חבר
הצטרף / הצטרפה: 18 April 2010 מדינה: Israel
משתמש: מנותק/ת הודעות: 243
|
נשלח בתאריך: 22 December 2013 בשעה 02:47 | | IP רשוּם
|
|
|
|
בס"ד
האלגוריתם שלך לאו דווקא "מסורבל וחסר תועלת".
האם עליך לקלוט את הערכים במערך? אם לא - מה שכתבת הוא בסדר
(והוא גם הבסיס לאלגוריתמי מיון מערכים).
בתור אקסטרא - היית מחליף את ערכי המשתנים באמצעות "השמה
הפוכה" במקום במשתנה החלפה, אבל זה זניח.
-----------
השמה הפוכה:
קוד:
a = a - b;
b = b + a;
a = b - a;
|
|
|
__________________ אין יאוש בעולם כלל!
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 02 March 2014 בשעה 21:52 | | IP רשוּם
|
|
|
|
חיימקה כתב:
בתור אקסטרא - היית מחליף את ערכי המשתנים באמצעות "השמה
הפוכה" במקום במשתנה החלפה, אבל זה זניח.
-----------
השמה הפוכה:
קוד:
a = a - b;
b = b + a;
a = b - a;
|
|
|
|
|
|
לחלוטין לא!
הפעולה הראשונה עלולה בהחלט לגרום ל-int overflow. נגיד ש-a=INT_MIN+1 ו-b=2. הפעולה a-b גורמת ל-int overflow.
או שאולי שם הכל היה בסדר, אבל מה אם a=INT_MAX/2+1 וגם b=INT_MAX/2+1? הסכום שלהם אמור להיות INT_MAX/2+INT_MAX/2+1+1 שזה לפחות INT_MAX+1 (ואולי INT_MAX+2, תלוי אם INT_MAX היה זוגי או אי-זוגי).
הטריק הזה ודומיו גורמים אך ורק לבעיות וצריך להימנע מהם.
|
חזרה לתחילת העמוד |
|
|
|
|
אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם
|
אינך יכול/ה לשלוח נושאים חדשים בפורום זה אינך יכול/ה להגיב לנושאים בפורום זה אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה אינך יכול/ה לצור סקרים בפורום זה אינך יכול/ה להצביע בסקרים בפורום זה
|