נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: צריך עזרה בסידור נתונים בסדר עולה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
kfirfer
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 03 March 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 14
נשלח בתאריך: 11 December 2013 בשעה 18:48 | IP רשוּם
ציטוט kfirfer



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

// קרא 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;
}

חזרה לתחילת העמוד הצג את כרטיס החבר של kfirfer חפש הודעות אחרות של kfirfer בקר בדף הבית של kfirfer
 
חיימקה
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 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 היה זוגי או אי-זוגי).

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

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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