1 / 28

Computer Programming Fall 2014

Computer Programming Fall 2014. תרגול 1. אתר הקורס. http://www.cs.bgu.ac.il/~prog141 באתר הקורס מופיעים: הודעות חשובות מצוות הקורס יתפרסמו תחת announcements עבודות יתפרסמו תחת assignments מבחנים משנים קודמות יפורסמו תחת previous exams ציונים לעבודות יפורסמו תחת grades

Download Presentation

Computer Programming Fall 2014

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ComputerProgramming Fall 2014 תרגול 1

  2. אתר הקורס • http://www.cs.bgu.ac.il/~prog141 באתר הקורס מופיעים: • הודעות חשובות מצוות הקורס יתפרסמו תחת announcements • עבודות יתפרסמו תחת assignments • מבחנים משנים קודמות יפורסמו תחת previous exams • ציונים לעבודות יפורסמו תחת grades • שאלות על העבודות ניתן לשאול תחת forum

  3. עבודות • במהלך הקורס יהיו 5 עבודות (בערך כל 10 ימים תהיה הגשת עבודה). • העבודות תוגשנה ביחידים. • בקשות לדחיית העבודה (עקב מילואים, או מחלה) יש להגיש להפנות למרצי הקורס בלבד!

  4. כללי • ניתן לחלק את עבודת התכנות באופן גס לשני חלקים: • מציאת אלגוריתם – דרך מסודרת לביצוע מה שאנו רוצים לבצע. • כתיבת האלגוריתם בשפה שבה אנחנו עובדים (C במקרה שלנו. האלגוריתם הוא בעצם פתרון כללי לבעיה ואינו קשור לשפה ספציפית. ניתן לתאר אותו למשל גם בעברית.

  5. מטרת התירגול • התנסות בפיתרון בעיות באמצעות כתיבת אלגוריתם. • אלגוריתם: דרך שיטתית (כלומר כזו שצעדיה מוגדרים היטב) לביצוע של משימה מסוימת, על נתונים, במספר סופי של צעדים (wikipedia). • רצוי שיהיה יעיל (חסכוני במשאבים). • לאלגוריתם בדרך כלל יש קלט שהוא מקבל ופלט רצוי. לדוגמא קלט: רשימת מספרים, פלט רצוי: הרשימה שקיבלנו ממוינת מהקטן לגדול.

  6. שאלה 1 כתוב תכנית המקבלת כקלט את הזמן הנוכחי בצורת מספר השעות(hours) מספר הדקות(minutes) ומספר נוסף חיובי (offset) בדקות, אשר יכול להיות יותר גדול מ- 60. יש לחבר אתoffset לזמן הנוכחי על מנת לחשב את הזמן החדש ולהדפיס אותו על המסך. דוגמא: הקלט hours: 23, minutes: 32, offset: 145 : הפלט hours: 1, minutes: 57 : רמז: השתמשו בפעולה / (חלוקה ללא שארית) ובפעולה % (שארית)

  7. פיתרון • קלוט hour, mins, offset • totalMin offset + mins • hour  24 % (60 /totalMin+ hour) • mins 60 % totalMin • הדפס hour :: mins נבדוק נכונות האלגוריתם

  8. משפטי בקרה אם-אז (if-else) • מבנה הפקודה: אם <תנאי> אז <פקודה/ות> אחרת <פקודה/ות> • דוגמה: אם x < 0 אז הדפס "x מספר שלילי" אחרת הדפס "x מספר חיובי"

  9. שאלה 2 כתוב תכנית הקולטת מן המשתמש שלושה מס' שלמים ומדפיסה אותם בסדר עולה (בתכנית יש לבצע לכל היותר שלוש פעולות ההשוואה).

  10. שאלה 2 נניח שאנו רוצים לקבלnum1>num2>num3 : num1 ? num2 num1 ? num3 num2 ? num3 מצב התחלתי: num1 > num2 num1 ? num3 num2 ? num3 num1 > num2 num1 > num3 num2 ? num3 num1 > num2 num1 > num3 num2 > num3 מצב סופי:

  11. פיתרון שאלה 2 • קלוט num3, num2, num1 • אם num1<num2 אזי: 2.1 החלף ערכים בין המשתנים num1 לבין num2. • אם num1<num3 אזי: 3.1 החלף ערכים בין המשתנים num1 ו-num3 • אם num2<num3אזי: 4.1 החלף ערכים בין המשתנים num2 ו-num3. • הדפס את num1, num2, num3.

  12. שאלה 2 #include<stdio.h> int main() { int num1,num2,num3; //These are the numbers that will be sorted. int temp; //This is a variable that will be used for swapping. printf("Please enter three integers:\n"); scanf("%d %d %d",&num1 ,&num2 , &num3); if(num1 < num2) { //Swap between num1 and num2 so that num1 will //hold the larger value: temp=num1; num1=num2; num2=temp; } num1 > num2 num1 ? num3 num2 ? num3

  13. שאלה 2 if(num1 < num3) { //Swap between num1 and num3 so that num1 will hold the //larger value: temp=num1; num1=num3; num3=temp; } if(num2 < num3) { //Swap between num2 and num3 so that num2 will hold the //larger value: temp=num2; num2=num3; num3=temp; } printf("The numbers in increasing order are: %d, %d and %d.\n",num3,num2,num1); } num1 > num2 num1 > num3 num2 ? num3 num1 > num2 num1 > num3 num2 > num3

  14. לולאות כל עוד <תנאי> בצע <פקודות> עבור i מ-1 עד 10 בצע <פקודות>

  15. שאלה 3 • כתבו אלגוריתם המקבל כקלט מספר טבעי (שלם שגדול מאפס) וגדול מ-1 ומחזיר כפלט האם המספר הזה הוא ראשוני. • תזכורת: מספר טבעי שגדול מ-1 נקרא ראשוני אם הוא מתחלק אך ורק בעצמו וב-1.

  16. פתרון • הגדר משתנים: num,div • 1. קלוט ל-num מספר שלםשגדול מ- 1 • 2. אתחל משתנה div עם הערך 2 • 3. כל עוד div קטן מ-num וגם div לא מחלק את mבצע • 3.1. הוסף אחד ל- div • 4. אם div שווה ל-num, אזי • 4.1. החזר: num הוא ראשוני • 5. אחרת, • 5.1. החזר: num אינו ראשוני • נאמת את נכונות האלגוריתם: 6, 5

  17. שיפורים אפשריים 1. לרוץ עד למחצית המספר. 2. לרוץ עד השורש הריבועי של המספר.

  18. שאלה 4 כתובתכניתהמקבלתכקלטמספרשלם n(גדול מ- 1) ומחשבתאתהאיברהמתאיםבסדרתפיבונצ'יהבאה: n: 0, 1, 2, 3, 4, 5, 6, . . . F(n): 0, 1, 1, 2, 3, 5, 8, . . . כךלמשל 24 האיבריםהראשוניםשלהסדרההם: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657. תזכורת: F(n)=F(n-1)+F(n-2) F(0)=0, F(1)=1

  19. פיתרון שאלה 4 • קלוט את n. • Fn2 0. • 1 .Fn1 • nFn. • עבור i מ-2 עד n בצע: 5.1 Fn Fn1 + Fn2 . 5.2 Fn2 Fn1. Fn1 Fn 5.3 • הדפס את Fn

  20. שאלה 4 #include<stdio.h> #include<stdlib.h> void main() { int n, Fn, Fn1, Fn2, i; printf(" N = "); scanf("%d", &n) ; Fn2 = 0 ; Fn1 = 1 ; Fn = n ; for (i=2 ; i <= n ; i++){ Fn = Fn1 + Fn2; Fn2 = Fn1; Fn1 = Fn; } printf("F(%d) = %d \n", n, Fn); }

  21. שאלה 5 כתובתכניתהמחשבתאתערכוהמקורבשלpi=3.141592653 באמצעותטורלייבניץברמתהדיוקשל .δ=0.0001 טורלייבניץהינו: החישובמסתייםכאשרהערךהמוחלטשלהמחוברהאחרוןשלהטוריהיהקטןאושווהל- .δהתכניתתדפיסאתהערךשלpi המחושבואתמספרהמחובריםשלהטורשישלסכוםאותם.

  22. פיתרון שאלה 5 • denom 1. • 1 sign • 0.0pi. • DELTA 0.0001 • בצע 5.1 1.0 / denomnext 5.2 pi pi + sign*next 5.3 denom denom + 2 5.4 sign sign*(-1) 5.5 כל עוד (next>(DELTA/4)) • הדפס את 4*pi ואת (denom-1)/2.

  23. שאלה 5 #include<stdio.h> #define DELTA 0.0001 void main() { int denom=1, sign=1; float pi=0.0, next; do { next = 1.0 / denom; pi += sign * next; denom+= 2; sign *= -1; } while (next > (DELTA/4)); printf("PI=%f #members=%d \n", pi*4, (denom-1)/2); }

  24. שאלה 6 כתובתכניתהמקבלת מספר מהמשתמש, המספר מהווה ציון של מבחן. אם הציון מתחת ל 56 התכנית תדפיס הודעת כשלון. אם הציון מעל 80 התכנית תדפיס הודעת מעבר בציון טוב. בכל מקרה אחר התכנית תדפיס הודעת מעבר. (ניתן להניח כי הערך המוזן מספרי וכי ערכו נע בין 0 ל 100). צייר תרשים זרימה.

  25. שאלה 6 #include <stdio.h> void main() { int grade; printf("Enter grade\n"); scanf("%d",&grade); if (grade<56){ printf("failed\n"); } else{ if ((grade>=56) && (grade<=79)){ printf("passed\n"); } else{ printf("good grade\n"); } } }

  26. שאלה 7 • כתוב תכנית שמקבלת מספר שלם חיובי ומחזירה את המספר שהוא היפוך ספרותיו • לדוגמה: • 2375 יתקבל עבור הקלט 5732 • 1025 יתקבל עבור 5201 או למשל גם עבור 52010 (מתעלמים מהאפסים העודפים במקרה זה)

  27. פתרון 1. קלוט מספר חיובי ל-num 0sum .2 3. בצע: sum+num%10sum .3.1 num/10num .3.2 .3.3 אם num=0 הדפס sum וסיים 3.4. אחרת: sum*10sum(חזור ל-3)

More Related