Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :

Similar presentations


Presentation on theme: "מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :"— Presentation transcript:

1 מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל : keren@eli-wigs.comkeren@eli-wigs.com

2 שאלה 1 ממבחן הדוגמה: כתבו פונקציה שמקבלת סדרה של מספרים ובודקת האם יש בהם שני מספרים רצופים שסכומם 10 או 20. אם יש שני מספרים רצופים שסכומם 10, על הפונקציה להחזיר 10. אם יש שני מספרים רצופים שסכומם 20, על הפונקציה להחזיר 20. אם יש גם מספרים רצופים שסכומם 10 וגם כאלה שסכומם 20, על הפונקציה להחזיר 30. אם אין מספרים רצופים שסכומם 10 וגם אין כאלה שסכומם 20, על הפונקציה להחזיר 0. ניתן להניח שהנתונים לפונקציה מגיעים באחת משתי הדרכים הבאות לפי בחירתכם : הפונקציה מקבלת קלט מהמשתמש באמצעות קריאה חוזרת ונשנית לפונקציה scanf. המספר האחרון בקלט הוא המספר 0, וזו הפעם היחידה שבה מופיע המספר 0 בקלט. הפונקציה מקבלת כפרמטר מערך מסוג int[ ]. המספר האחרון במערך הוא 0 והוא אינו מופיע בשום מקום אחר במערך.

3 פתרון: int f(int a[]) { int i,num1=0,num2=0; for (i=0;a[i]!=0;i++) { if (a[i]+a[i+1]==10) num1=10; if (a[i]+a[i+1]==20) num2=20; } return(num1+num2); }

4 כתוב תכנית שמדפיסה את ראשי התיבות של מחרוזת #include void main() { char st[]="we learn c"; int i=0,flag=1; while (st[i]) { if (st[i]!=' ' && flag==1) printf("%c",st[i]); flag=0; if (st[i]==' ') flag=1; i++; } }

5 כתוב תכנית שקולטת עבור 5 תלמידים (שממוספרים מ 1 עד 5) את ציוניהם ב 4 מקצועות מחשבת ממוצע של כל תלמיד ומדפיסה את מספר התלמיד שהממוצע שלו הכי גבוה #include #define N 5 int big(float a[]); void main() { int i,j,grade,sum; float a[N]; for (i=0;i<N;i++) { sum=0; printf ("\n enter grades of student number %d \n",i+1); printf (" enter 4 grades: \n"); for (j=1;j<=4;j++) { scanf("%d",&grade); sum+=grade; { a[i]=((double)sum)/4; } printf ("\n student number %d has the best average ",big(a)+1); } int big(float a[]) { int i,index=0; float max=a[0]; for (i=1;i<N;i++) if (a[i]>max) { max=a[i]; index=i; { return index; } במקרה שבו ישנם מספר תלמידים שקיבלו את אותו הממוצע המקסימאלי, התכנית לא תדפיס זאת. הוסיפו פונקציה שתדפיס את מספרי כל התלמידים שהממוצע שלהם מקסימאלי

6 תרגיל כתוב פונקציה שמקבלת שתי מחרוזות s1,s2 ומבצעת :  אם ישנם תווים גדולים משותפים לשתי המחרוזות הפונקציה תדפיס את המיקום של המופע האחרון של התו המשותף במחרוזת s1.  אם ישנם תווים קטנים משותפים, תמצא את התו המשותף האחרון מבין התווים של s1 ותדפיס את המיקום שלו ב -s2.  אם ישנם תווים גדולים וגם תווים קטנים משותפים, הפונקציה תקרא לפונקציה נוספת שתדפיס את התו האחרון המשותף הקטן כגדול ואת התו הגדול האחרון כקטן.  אחרת, הפונקציה תדפיס שאין תווים משותפים. הערה : נסתכל על כל התווים הקטנים המשותפים לשתי המחרוזות, ונתייחס רק לתו האחרון מביניהם שמופיע ב s1. כנ " ל לגבי תווים גדולים משותפים. לדוגמה : S1= “ A,b,f,D,e ” s2= “ a,H,f,d ” ישנם רק תווים קטנים משותפים. התו האחרון במחרוזת s1 שמופיע גם במחרוזת s2 הוא f ומיקומו במחרוזת s2 הוא 3. לכן על הפונקציה להדפיס 3.

7 void shared(char s1[],char s2[]) { int i,j,index1=-1,index2=-1; for (i=0;s1[i];i++) for (j=0;s2[j];j++) if (s1[i]==s2[j]) if (s1[i]>='A' && s1[i]<='Z') index1=i; else if (s1[i]>='a' && s1[i]<='z') index2=j; if (index1+index2<-1) /* or: if (index1==-1 && index2==-1) */ printf (" there are no shared letters\n"); else if (index1!=-1 && index2!=-1) change_size(s1[index1],s2[index2]); else if (index1!=-1) printf (" the last appearance in s1 %d \n",index1+1); else printf (" the last appearance in s2 %d \n ",index2+1); } void change_size(char x,char y) { printf ("\n %c appears at bouth strings as a big letter",x-('A'-'a')); printf ("\n %c apperrs at bouth strings as a little letter %c",y+('A'-'a')); }

8 שנה את הפונקציה כך שתדפיס את המיקום של המופע הראשון של התו המשותף. דוגמאות : 1) S1= “ a,b,c,d ” s2= “ D,b,f,a ” ישנם רק תווים קטנים משותפים, התו הראשון ב s1 שמשותף לשתי המחרוזות הוא a, מיקום תו זה במחרוזת s2 הוא 4, ולכן הפונקציה תדפיס 4. 2) S1= “ f,B,c,D,a ” s2= “ D,w,z,B,t,h ” ישנם רק תווים גדולים משותפים, מיקום התו הגדול הראשון ב s1 הוא 2, לכן הפונקציה צריכה להדפיס 2. 3) S1= “ a,b,R,d,e ” s2= “ R,w,e ” ישנם גם תווים גדולים משותפים וגם קטנים. הפונקציה תדפיס r,E

9 int i,j,index1=-1,index2=-1,flag1=0,flag2=0; for (i=0;s1[i];i++) for (j=0;s2[j];j++) if (s1[i]==s2[j]) if (s1[i]>='A' && s1[i]<='Z ‘ && flag1=0) { index1=i; flag1=1; } else if (s1[i]>='a' && s1[i]<='z ‘ && flag2=0) { index2=j; flag2=1; }


Download ppt "מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :"

Similar presentations


Ads by Google