שחזורי ראיונות עבודה -> Ceva- QA Eng for STD Deprtment
  • Ceva- QA Eng for STD Deprtment
  • ע"י: ניר הכושי
    2 שאלות ב- C: 1. לממש את הפונקציה Itoa שבנוייה ככה: itoa(int value, char *str כל "פונקציית ספרייה", צריך לממש גם: למשל הפונקציות strlen ו- abs שתצטרכו לממש גם כנראה בדרך לפיתרון. את השאלה הזו פתרתי וזו השאלה הפשוטה מבין השניים. 2. שאלה שבעצם אף אחד לא פותר, אבל רוצים לבדוק את הדרך שאתם מתמודדים איתה כנראה. בעצם הרעיון של הפונקציה שמבקשים ממכם היא לקחת סדרה של מספרים (לדוגמא היה סדרה עם 3 איברים: 10 20 30- 10 איבר ראשון, 30 אחרון) בסופו של דבר התוכנית אמורה לעבור על כל הסדרה ולהדפיס למסך את כל הזוגות האפשריים, אך בלי כפילויות- המשמעות אם איבר מסויים הודפס כבר יחד עם איבר אחר, הם לא יודפסו: {} - קבוצה ריקה 10 20 30 10 20 10 30 20 30 10 20 30 בשלב ראשון שואלים אתכם כמה אפשרויות יודפסו למסף, התשובה 2 בחזקת N. בשלב שני מבקשים לממש, אני לא הצלחתי ורק הסתבכתי עם משהו שאולי היה נותן לי תשובה נכונה אחרי הרבה עבודה קשה. בכל אופן צריך ללכת לפי הסדר בטבלה בינארית עד שמגיעים לאיבר האחרון (הכל 1)
  • ע"י: ניר הכושי
    הפתרון שלי לשאלה הראשונה: (יש פתרונות אלגנטים יותר באינטרנט, פשוט חפשו c itoa implementation) #include <stdlib.h> #include <stdio.h> // Returns the length of an integer int howLong(int value){ int tens = 10; int mod = 0; int i = 0; do{ mod = value%tens; i++; tens *= 10; }while(mod != value); return i; } // itoa implementation void itoa2(int value, char* str){ int start = 0; int end = 0; int length = howLong(value); if(value<0){ *(str) = '-'; start = 1; end = 1; } int currentDigit = 0; int tens = 10; for(int i=(length + end) - 1;i>=start;i--){ /* Take the modulo of the current multiplicity of 10 minus the previous one and divide the result by the previous multiplicity of 10 */ currentDigit = (tens == 10)?(abs(value) % tens):(((abs(value) % tens) - (abs(value) % (tens / 10))) / (tens / 10)); switch(currentDigit){ case 0: *(str + i) = '0'; break; case 1: *(str + i) = '1'; break; case 2: *(str + i) = '2'; break; case 3: *(str + i) = '3'; break; case 4: *(str + i) = '4'; break; case 5: *(str + i) = '5'; break; case 6: *(str + i) = '6'; break; case 7: *(str + i) = '7'; break; case 8: *(str + i) = '8'; break; case 9: *(str + i) = '9'; break; } tens *= 10; } *(str + length + end) = '\0'; } // Returns absolute number int abs(int value){ if(value<0) return value*(-1); return value; } void main(){ int value= -1234; char *str; str= (char*)malloc(100); itoa2(value1, str); flushall(); puts(str); free(str); }