שחזור מלא -ראיון בחברת audio codes אודיוקודס
שאלה 1:
נתון הקוד הבא וצריך להגיד מה הבעיות
char *ip_address(unsigned int ip)
{
char str;
char *p = (char*)&ip;
sprintf(str, %d%d%d%d, p, p, p, p);
return str;
}
שאלה 2:
נתון מספר כלשהו בעל 4 ספרות וניחוש גם בעל 4 ספרות
לדוגמא
מספר 1234, ניחוש 1489
צריך להגיד כמה מספרים הוא בדיוק במקום וכמה ליד
למשל בדוגמא הזאת התוצאה תהיה
1 exact, 1 near
דוגמא נוספת
מספר 1122, ניחוש 2121
התוצאה
2 exact, 2 near
צריך לכתוב קטע קוד שממש את זה
בהצלחה.
בשאלה הראשונה צריך גם להתיחס להאם המע' היא big endian או little endian, גם אם המידע מקודד בint בתור 4 בתים נפרדים הסדר שלהם תלוי ב endianess
לפני 10 שנים
ע"י: 1_אורח_כללי
בנוסף, ה-cast נעשה למערך של char ולא unsigned char, אז:
192 יהפוך ל- -64 (מינוס) כאשר יקודם ל-int בזמן ההעברה ל-printf
(ה-printf משתמש ב- %d אז הוא יציג אותו אכן כ- -64. גם שם הייתי משנה ל-%u, אבל זה בלי קשר, כי רק לשנות ל-%u לא יעזור.)
לפני 13 שנים
ע"י: 1_אורח_כללי
זו אכן הבעיה העיקרית, מבחינת תכנות.
בנוסף יש את העובדה שה-IP שיתקבל ב- STR, לפני שחוזרים לפונקציה הקוראת, יתקבל ללא הפרדה באמצעות נקודות ואז לא באמת קיבלנו את מה שרצינו.
לדוגמא, תוצאה כזו: 1921683412 לא כל כך תעזור לנו...
לפני 14 שנים
ע"י: 1_אורח_כללי
מה ההגדרה של "ליד"??
ולגבי השאלה הראשונה, יש בעיתיות נוספת חוץ מזה שהפונק' מחזירה פוינטר למשתנה לוקלי?
לפני 14 שנים
ע"י: קינג_יוניק
ההצעה שלי לפתרון השאלה השניה:
void assessGuess (unsigned num, unsigned guess) {
static bitset<10> digitLUT;
digitLUT.reset();
for (unsigned tmp = num; tmp; tmp/=10) {
digitLUT.set(tmp%10);
}
unsigned exact = 0;
unsigned near = 0;
for (; guess; guess /= 10, num /= 10) {
if (guess%10 == num%10)
exact++;
else if (digitLUT.test(guess%10))
near++;
}
cout << "exact = " << exact << "\nnear = " << near << endl;
}
test output:
num = 1799 guess = 4729
exact = 2
near = 0
num = 1210 guess = 1437
exact = 1
near = 0
num = 2063 guess = 3082
exact = 1
near = 2
num = 6355 guess = 1339
exact = 1
near = 1
num = 1096 guess = 1743
exact = 1
near = 0
num = 7124 guess = 5532
exact = 0
near = 1
num = 4841 guess = 4942
exact = 2
near = 0
num = 8791 guess = 9903
exact = 0
near = 2
num = 5659 guess = 7142
exact = 0
near = 0
num = 6394 guess = 8361
exact = 1
near = 1