מאת JobHunt
1. ממש פונקציה שמקבלת מספר עשרוני ומדפיסה את ערכו הבינארי.
2. בהינתן רשימה מקושרת עם מצביע לאיבר הראשון בלבד. החזר רשימה שהיא אותה הרשימה שקיבלת רק בסדר הפוך, כלומר אם הסדר היה
head–>11>22>33
אז אחרי הוא יהיה:
head–>33>22>11
אסור להזיז האיברים עצמם, רק מצביעים.
יש לפתור ב-C.
פתרונות מוצעים:
/*
*Q1.Write a function in C for printing to screen the binary value of a given decimal value.
*/
#include <stdio.h>
#include <string.h>
long dec2bin(int dec){
if(dec<0){ printf("MINUS: (-)"); dec=-dec;}
if(dec==0 || dec==1) return (long) dec;
return (long) (10*dec2bin(dec>>1) + (dec & 1));
}
main(){
int arg=-300000;
printf("%ld is the binary value of the decimal number: %d", dec2bin(arg), arg);
}
/*Will result: MINUS: (-)1001001001111100000 is the binary value of the decimal number: -300000*/
/*
*Q2. Reverse a given Linked List. Only pointers changes are allowed.
*/
#include<stdlib.h>
#include<stdio.h>
typedef struct linkList {
int value;
struct linkList * next;
} Node;
void printLinkedlist(Node *head){
printf("\nHead->");
for( ; head; head = head->next)
printf("%d->", head->value);
printf("NULL\n");
}
Node* reversedLink(Node *head){
if( !(head && head->next) ) return head;
Node *reversedhead = reversedLink(head->next);
head->next->next = head;
head->next = NULL;
return reversedhead;
}
void main() {
Node * curr, * head;
int i;
head = NULL;
for(i=1; i<=10; i++, head=curr)
*(curr = (Node *) malloc(sizeof(Node))) = (Node) {i, head};
printf("\nBefore:");
printLinkedlist(head);
printf("\nAfter:");
printLinkedlist( (head = reversedLink(head)) );
}
/*Will result:
Before:
Head->10->9->8->7->6->5->4->3->2->1->NULL
After:
Head->1->2->3->4->5->6->7->8->9->10->NULL*/
מאת JobHunt
ראיון מחולק לשלושה חלקים:
1) שני מראיינים שואלים שאלות עליך.
2) אחד מהם מספר על החברה.
3) חלק שלישי זה שאלה לוגית ושאלת קוד:
1) שאלה לוגית:
יש שלושה כדים אשר מכילים שני כדורים. צבעי הכדורים יכולים להיות:
אדום אדום
אדום שחור
שחור שחור
כדים הנ"ל אם תויות אשר כיתוב עליהם משקר.
כד ראשון:
כיתוב על התוית – אדום אדום
כד שני:
אדום שחור
כד שלישי:
שחור שחור
צריך למצוא מינימום הוצאות כדי לדעת איזה כדורים נמצאים בכדים בוודאות.
לבדיקת התאמה
פתרון:
יש שלוש פתרונות לתרגיל הזה וצריך להציג אותם וכמובן להסביר למה בחרתם בפתרון הזה, מה המינימום ההוצאות בכל פתרון.
פתרון ראשון:
נניח הוצאנו כדור אדום מכד ראשון:
בכד ראשון יהיה אדום שחור
בכד שני – שחור שחור
בכד שלישי – אדום אדום
אם הוצאנו מכד ראשון כדור שחור:
כד ראשון – שחור שחור
כד שני – אדום אדום
כד שלישי – אדום שחור
זאת אומרת במקרה הזה יהיה שני הוצאות כדי לדעת איזה כדורים יש בשאר הכדים וזה סיכוי של 50 על 50.
פתרון שני:
דומה לפתרון הראשון רק פה אנחנו צריכים הוצאה אחד. וזה סיכון 50 על 50.
פתרון שלישי (פתרון הנכון):
אנחנו נוציא כדור אדום מכד שני ולכן:
כד שני – אדום אדום
כד ראשון – שחור שחור
כד שלישי – אדום שחור.
המלצות:
תחשבו על תרגילי לוגיקה היטב, על תמהרו (מה שעשיתי), זה לא אמור לקחת יותר מ-5-10 דקות.
2) שאלה על קוד:
נתונה הגדרה של הפונקציה הבאה –
char *str pbreak(str1*, str2*);
ומספר דוגמאות לקריאת פונקציה –
str1 = 'Hello Mellanox!';
str2 = '123!';
str2 = '123';
str2 = 'olle';
עליכם להסביר מה מקבלת ומחזירה פונקיה ומה תהיה ב-str2 לאחר שפונקיה תסיים לעבוד.
גם כן צריך להסביר כל שלב שאתם עושים.
אחרי זה מבקשים לכתוב פונקציה זו ב-C או ב-Python בכמה שפחות שורות קוד.
צריך גם להסביר סיבוכיות למקרים ספיציפיים שיכולים לשאול.
לבדיקת התאמה
מאת JobHunt
1. כתוב פונקציה המזהה אם מספר הוא פולינדרום
2. שאלה ידועה על איך מזהים את המספר החסר במערך מספרים מ 1 עד N וגם אם חסרים 2 מספרים
לבדיקת התאמה
מאת JobHunt
נתונים שני סוגי רכיבים עם שתי כניסות ויציאה אחת שזו טבלת האמת שלהם.
יש ליצור מרכיבי איי ו- בי שער קסור
A1 A2 F B1 B2 F X1 X2 F-XOR
0 0 0 0 0 Z 0 0 0
0 1 Z 0 1 Z 0 1 1
1 0 Z 1 0 Z 1 0 1
1 1 Z 1 1 1 1 1 0
לבדיקת התאמה
מאת JobHunt
שאלה 1:
נתון רכיב עם 3 כניסות ו-2 יציאות.
הרכיב מוציא מספר 'אחדים' שיש בכניסה.
למשל, עבור כניסות 001, 010, 100 – ביציאה יהיה 01 ('אחד' אחד)
עבור כניסות 011, 101, 110 – ביציאה יהיה 10 (שני 'אחדים')
עבור כניסה 111 – ביציאה 11 (שלושה 'אחדים')
מהרכיבים כנ"ל בלבד תבנה רכיב עם 7 כניסות ו-3 יציאות
פתרון:
ישנם סה"כ 4 רכיבים:
שני רכיבים (רכיב1 ורכיב 2) מקבלים כניסות X1-X6
מוצא שלהם זה Y1-Y4
רכיב 3 מקבל כניסות : Y2, Y4 ו-X7
מוצא של רכיב 3: Z3, Z4
רכיב 4 מקבל כניסות: Y1, Y3 ו-Z3
מוצא של רכיב 4: Z1, Z2
מוצא של הרכיב היעד: Z1, Z2 ו-Z4
לבדיקת התאמה
שאלה 2:
ישנם 25 סוסים.
מהו מספר מרוצים הקטן ביותר הנדרש כדי לבחור 3 סוסים המהירים ביותר.
בכל מירוץ יכולים להשתתף עד 5 סוסים.
תשובה: 7 מירוצים.
פתרון:
שלב 1: מריצים 5 מרוצים עם כל הסוסים הניתנים (נמספר מירוצים מ-1 עד 5)
בגמר המירוצים כל סוס מקבל מספר אישי: 'מקום' – 'מספר מירוץ'
למשל שלושה מנצחים במירוץ 4 יהיו: 4-1, 4-2, 4-3
מסקנת ביניים: עקרונית אותנו מעניינים 3 סוסים המנצחים בכל מירוץ – סה"כ 15 סוסים.
שלב 2: מכניסים למירוץ 6 את חמישה הסוסים המנצחים בכל מירוץ (סוסים 1-1, 2-1, 3-1, 4-1, 5-1)
המנצח במירוץ 6 הוא המהיר בין כל ה-25 – המקום הראשון המוחלט.
ועכשיו הסופר טריק – לבחור מי ישתתף במירוץ השביעי והאחרון שייקבע את מקום השני והשלישי.
שלב 3:
נניח המנצח הגדול (במירוץ 6) הוא במקור המנצח במירוץ 4 (4-1 == 6-1).
כלומר המנצח הגדול ניצח את סוסים: 1-1, 2-1, 3-1, 5-1
ברור לגמרי שסוס 2-1 מהיר יותר מסוס 2-2.
וסוס 2-2 מהיר יותר מסוס 2-3.
כלומר סוס 2-3 יכול לזכות לכל היותר במקום רביעי כי 4-1, 2-1 ו-2-2 בוודאות מהירים ממנו.
לכן 2-3 לא ממשיך תחרות.
באותו אופן יורדים מתחרות סוסים 1-3, 3-3, 5-3
סוס 4-3 עדיין לא יורד מתחרות ונחשב למועמד כי ייתכן וכל הסוסים הכי מהירים היו במירוץ 4.
עכשיו נתבונן בסוס 6-2 – סוס במקום השני במירוץ 6.
בזמנו סוס 6-2 היה המנצח במירוץ שלו. נניח זה סוס 5-1 (5-1 == 6-2)
סוס 5-1 הפסיד לסוס 4-1, אבל ניצח את 1-1, 2-1, 3-1
מה עכשיו ניתן להגיד למשל על סוס 3-2?
שישנם לפחות שלושה סוסים מהירים ממנו: 4-1, 5-1, 3-1
כלומר סוס 3-2 יורד מתחרות כמו גם סוסים 1-2, 2-2.
נניח סוס 6-3 == 3-1.
מכאן סוסים 1-1, 2-1 שהפסידו בגדול במירוץ 6 לא ישתתפו גם
נותרנו עם 5 מועמדים למירוץ 7 ואחרון: 5-1 (6-2), 3-1 (6-3), 5-2, 4-2, 4-3
שניים הראשונים במירוץ 7 יתמפו למקומות שני ושלישי בהתאם בתחרות הכללית.
לבדיקת התאמה
מאת JobHunt
בראיון הראשון שאלו על הפרוייקט שעשיתי, על התוכנות שהשתמשתי (vistuoso).
ביקושו ממני לצייר סכמה של שער nand, טבלת אמת שלו ואז את ה-layout שלו.
ביקשו ממני להסביר מה השיקולים שעל פיהם ציירתי את הlayout, איך משפיע חיבור metal כזה או אחר (התשובה היא על ההשהייה מכיוון שככל שהמתח ארוך יותר ההתנגדות גדולה יותר וזה משפיע על ההשהייה של המוצא)
בנוסף שאלו שאלת הגיון:
נתונים שנים חוטים שכל אחד בוער דקה. איך ניתן למדוד 15 שניות.
לבדיקת התאמה
הפתרון הוא שמדליקים חוט אחד משני הצדדים ואת החוט השני בצד אחד, כשהחוט הראשון נשרף עברה חצי דקה. כלומר החוט השני יכול לבעור עוד 30 שניות לכן נדליק גם את צידו השני והוא ישרף תוך 15 שניות.
בראיון השני שוב שאלו על layout של nand , ביקשו לצייר, להסביר את השיקולים של קביעת גדלי הטרנזיסטורים, שאלו על גודל של טרנזיסטור שקול של שני טרנזיסטורים בטור ובמקביל,
והרבה חפירות על ה-layout.
אחרי זה נתנו לי מעגל עם גשר דיודות כך שמשמאלו יש מקור מתח V1 שהוא 5 וולט, מימינו יש מקור מתח V2 שמשתנה בין 0 ל 5 וולט, למעלה יש מקור זרם I1 ולמטה מקור זרם I2 (הייתי מעלה שרטוט אבל אני לא יכול לצרף קובץ להודעה)
שאלו אותי מה יהיה הזרם על מקור המתח V2 (הימני) כתלות במתח של אותו מקור המתח V2.
מאת JobHunt
1. שאלו על הפרויקט שעשיתי , צריך לדעת אותו טוב .
2. נתנו לי שאלה בתכנות לבנות פונקציה שמקבלת מספר ובודקת האם הוא פולינדרום(מימוש הפונקציה היה ב C אבל תכלס זה לא היה משנה לו באיזה שפה גם פסודו-קוד היה בסדר(שאלתי אותו) )
3. שאלת הגיון של מינימום מקסימום: ישנה קופסה שמקבלת 2 מספרים והפלט שלה הוא שני מספרים כאשר האחד הוא המקסימום והשני המינימום. ביקשו ממני לממש קופסה שמקבלת 4 מספרים וממיינת אותם(המימוש בעזרת הקופסא של שני המספרים), לאחר שפותרים את השאלה ביקשו לממש קופסא של 6 מספרים.
לבדיקת התאמה
מאת JobHunt
1. בטורניר משתתפות 100 קבוצות. קבוצה שמפסידה יוצאת והמנצחת משחקת מול השניה. כמה טורנירים יהיו?
2. חיבור נקודות: 5 קבוצות של 3 נקודות, יש לחבר בין הקווים כך שלא יחתכו זה את זה.
3. ריבוע המורכב מ – 9 נקודות (3 למעלה, 3 באמצע ו -3 למטה) – יש לחבר ביניהם בקו אחד.
לבדיקת התאמה
מאת JobHunt
1. יש לצייר layout של טרניסטור.
2. מעבר בין תצוגת רוטון לפולי – למה שקול מקור המתח המחבר אותם?
3. מעגל המחובר לארבעה נגדים בצורת מעוין. מה הnתח בין שתי נקודות?
4. להסביר איך נראית דיודה אידאלית (ציור IV).
5. מכונת מצבים – יש להסביר מה היא עושה.
לבדיקת התאמה