Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא כללי למדעי המחשב תרגול 4

Similar presentations


Presentation on theme: "מבוא כללי למדעי המחשב תרגול 4"— Presentation transcript:

1 מבוא כללי למדעי המחשב תרגול 4
שבוע:

2 לולאות for שבוע שעבר for (counter=1 ;counter<=7 ; counter++ ) {
שם המשתנה שבאמצעותו נשלוט בלולאה קידום משתנה הלולאה הערך שבו נאתחל אותו for (counter=1 ;counter<=7 ; counter++ ) { loop body } התנאי שכל עוד הוא מתקיים נמשכת הלולאה מה ערכו של המשתנה כאן ?

3 מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. אתגר: כתוב תוכנית שקולטת 100 מספרים שלמים ומדפיסה אותם מהאחרון שנקלט לראשון. קלט: , ... , פלט: , ... ,

4 אל תנסו בבית !!! פתרון (בלי מערכים) void main() { int a1,a2,a3,…,a100;
scanf(“%d%d%d …”,&a1,&a2,&a3,…); printf(“%d %d %d …”,a100,a99,a98,…); } אל תנסו בבית !!!

5  מערכים int a; a=5; int a[10]; a[2] = 5; a 5 משתנה בודד a[0] מערך
גישה למשתנה השלישי במערך a[2] 5 a[9]

6 void main() { int i=0; int a[100]; for (i=0;i<100;i++)
scanf (“%d”,&a[i]); for (i=99;i>=0;i--) printf (“%d ”,a[i]); } קלט פלט

7 תרגיל 1 כתוב תוכנית הקולטת 10 איברים
לתוך מערך ומדפיסה תחילה את כל האיברים הזוגיים ואחר כך את כל האיברים האי זוגיים Enter numbers 91 32 23 14 65 46 57 18 39 510 Even: Odd:

8 #include <stdio.h> #define SIZE 10 void main() {
int i,arr[SIZE]; printf("Enter numbers\n"); for (i=0;i<SIZE;i++) scanf("%d",&arr[i]); printf("Even:\n"); if (arr[i] % 2 == 0) printf("%d ",arr[i]); printf("\nOdd:\n"); if (arr[i] % 2 != 0) printf("\n"); } קלט פלט

9   מערכים - אתחול int a[10] = {1,2,3}; int a[10] = {0}; a[0] 1 a[1] 2
a[0] a[1] a[2] a[9]

10 הגדרת פונקציות הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציה רשימת הערכים שהפונקציה מקבלת return-value-type function-name(parameter1, parameter2, …) { Function body return-value } דוגמא: נממש את הפונקציה f(x) = x^2 double sqr(double x) { return x*x; } הגדרת הפונקציה גוף הפונקציה

11 פונקציות- דוגמא נוספת int minimum( int x, int y, int z ) {
נממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים: int minimum( int x, int y, int z ) { int min = x; if ( y < min ) min = y; if ( z < min ) min = z; return min; } משתנה מקומי שמוכר רק בתוך הפונקציה x y z

12 שימוש בפונקציות int main() { int a, b, c;
printf( "Enter three integers: " ); scanf( "%d%d%d", &a, &b, &c ); printf( "Min is: %d\n", minimum( a, b, c ) ); return 0; }

13 שימוש בפונקציות int main() { int a, b, c, min;
printf( "Enter three integers: " ); scanf( "%d%d%d", &a, &b, &c ); min = minimum( a, b, c ); printf( "Min is: %d\n", min); return 0; }

14 העברת הערכים minimum main 4 5 2 4 5 2 x a משתמש y b z c

15 הכרזה על פונקציות double sqr( double ); int minimum( int, int, int );
הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציה רשימת סוגי הערכים שהפונקציה מקבלת return-value-type function-name(parameter1, parameter2, …); הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית מאפשרת לנו להשתמש בפונקציה בכל מקום. double sqr( double ); int minimum( int, int, int ); int main() { }

16 תרגיל 2 כתוב פונקציה המקבלת מספר שלם ומחזירה 0 אם הוא
לא ראשוני ו- 1 אם כן. הדרכה: void main() { if (IsPrime(7) == 1) printf(“7 is prime”); } int IsPrime(int p) תוכנית שמשתמשת בפונקציה הפונקציה (השלימו את הגוף) ?

17 תרגיל 2- המשך קלוט מספר והדפס את כל המספרים הראשונים עד אליו
תוך שימוש בפונקציה שכתבת.

18 תרגיל 2- פתרון הפונקציה int IsPrime(int num) { int k;
for(k = 2 ; k*k <= num; k++) if (num % k == 0) return 0; } return 1; לולאה למציאת מחלקים בדיקה למציאת מספר שמחלק את הקלט לפונקציה במידה ונמצא אז להחזיר 0 אם הגענו לכאן אז אף מחלק לא נמצא והמספר ראשוני

19 תרגיל 2- פתרון התוכנית הראשית void main() { int num, last;
printf(“Enter a number\n"); scanf("%d", &last); for (num = 2; num <= last; num++) if (IsPrime(num) == 1) printf("%d is prime\n", num); } לולאה להדפסת כל הראשונים עד למספר שנקלט בדיקת ראשוניות

20 חישוב ערכים באמצעות לולאות
נתון הסכום הבא: n (-1)i+1 4 2i -1 i = 1 נכתוב פונקציה שמחשבת אותו

21 חישוב הסכום הפונקציה double calc_something(int n) { int i,key=1;
double result = 0; for (i=1; i<=n ;i++) result = result + key*(4.0/(2*i-1)); key *= -1; } return result; החישוב עצמו

22 תרגיל 3 כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של החישוב. הדרכה:
זוהי הכרזת הפונקציה: double calc_something(double eps) { } (-1)i+1 4 < eps הפונקציה תרוץ עד שיתקיים 2i -1

23 תרגיל 3- פתרון double calc_something(double eps) הפונקציה {
int i=1,key=1; double result = 0,expr; do expr = 4.00/(2*i-1); result = result + key*expr; i++; key *= -1; } while (expr >= eps); return result; } הפונקציה הדיוק

24 הקשר בין מערכים לפונקציות
כיצד נכתוב פונקציה אשר תקבל כפרמטר מערך ? הפונקציה תקבל מערך (את כתובתו) ותדפיס אותו: void PrintArray(int a[ ],int size) { int i; for (i=0;i<size;i++) printf(“%d”,a[i]); }

25 הקשר בין מערכים לפונקציות
הפונקציה תקלוט איברים לתוך מערך void GetArray(int a[ ],int size) { int i; for (i=0;i<size;i++) scanf(“%d”,&a[i]); }

26 void GetArray(int a[ ],int size);
void PrintArray(int a[ ],int size); int main() { int a[SIZE]; GetArray(a,SIZE); PrintArray(a,SIZE); return 0; }

27 מחרוזות מחרוזת – מחרוזת זה מערך של תווים אשר מסתיים ב ‘\0’.
‘S’ a[0] 5000 char a[6] = “Shai”; printf(“%s”,a); a[1] ‘h’ 5001 a[2] ‘a’ 5002 5003 a[3] ‘i’ a[4] ‘\0’ 5004 a[5] 5005 הדפסה באמצעות %s

28 מחרוזות הסיום ב ‘\0’ מאפשר לנו להעביר מחרוזות
לפונקציות מבלי לציין את גודלם!!! פונקציה טיפוסית של מחרוזות תראה כך: void string_func(char s[ ]) { int k; while (s[k] != ’\0’)

29 #include <stdio.h> int strlen(char str[ ]) { int k = 0;
while ( str[k] != ’\0’ ) k++; return k; } int main() char str[ ]=“LINUX"; printf("%d",strlen(str)); return 0; מה קורה פה ? 100 101 102 103 104 105 106 L I N U X ‘\0’ str str[k]


Download ppt "מבוא כללי למדעי המחשב תרגול 4"

Similar presentations


Ads by Google