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

29
בבבב בבבב בבבבב בבבבב בבבב בבבב בבבבב בבבבב בבבבב בבבבב4 4

Upload: xaria

Post on 14-Jan-2016

64 views

Category:

Documents


0 download

DESCRIPTION

מבוא כללי למדעי המחשב תרגול 4. לולאות for. שבוע שעבר. שם המשתנה שבאמצעותו נשלוט בלולאה. קידום משתנה הלולאה. הערך שבו נאתחל אותו. for (counter=1 ;counter

TRANSCRIPT

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

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

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

forfor לולאות לולאות

for for (counter=1 ;counter<=7 ; counter+(counter=1 ;counter<=7 ; counter++ )+ )

{{

loop bodyloop body

}}

שם המשתנה שבאמצעותו נשלוט בלולאה

הערך שבו נאתחל אותו

התנאי שכל עוד הוא מתקיים נמשכת הלולאה

קידום משתנה הלולאה

אןמה ערכו של המשתנה כ ?

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

מערכיםמערכים

עד היום התוכניות שלנו לא ידעו לשמור כמות עד היום התוכניות שלנו לא ידעו לשמור כמות •גדולה של מידע ללא הגדרת כמות גדולה של גדולה של מידע ללא הגדרת כמות גדולה של

משתנים. משתנים.

מספרים מספרים 100100אתגר: כתוב תוכנית שקולטת אתגר: כתוב תוכנית שקולטת •שלמים ומדפיסה אותם מהאחרון שנקלט שלמים ומדפיסה אותם מהאחרון שנקלט

לראשון. לראשון. 100100 9999 , ... , , ... , 55 44 33 22 11קלט: קלט: 11 22 33 44 55 , ... , , ... , 9999 100100פלט: פלט:

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

פתרון )בלי מערכים(פתרון )בלי מערכים(

void main()void main()

{{

int a1,a2,a3,…,a100; int a1,a2,a3,…,a100;

scanf(“%d%d%d …”,&a1,&a2,&a3,…);scanf(“%d%d%d …”,&a1,&a2,&a3,…);

printf(“%d %d %d …”,a100,a99,a98,…);printf(“%d %d %d …”,a100,a99,a98,…);

}}

!!! אל תנסו בבית

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

מערכיםמערכים

int a;int a;

a=5;a=5;

int a[10];int a[10];

a[2] = 5;a[2] = 5;

5a

a[0]

a[1]

a[2]

a[9]

5

משתנה בודד

מערך

גישה למשתנה

השלישי במערך

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

int main()int main()

{{

int i=0;int i=0;

int a[100];int a[100];

for (i=0;i<100;i++)for (i=0;i<100;i++)

scanf (“%d”,&a[i]);scanf (“%d”,&a[i]);

for (i=99;i>=0;i--)for (i=99;i>=0;i--)

printf (“%d ”,a[i]);printf (“%d ”,a[i]);

return 0;return 0;

}}

קלט

פלט

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

11תרגיל תרגיל איברים איברים 1010כתוב תוכנית הקולטת כתוב תוכנית הקולטת

לתוך מערך ומדפיסה תחילה את כל האיברים לתוך מערך ומדפיסה תחילה את כל האיברים

הזוגיים ואחר כך את כל האיברים האי זוגייםהזוגיים ואחר כך את כל האיברים האי זוגייםEnter numbers913223146546571839510Even:32 14 46 18 510Odd:91 23 65 57 39

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

#include <stdio.h>#include <stdio.h>int main()int main(){{

int i,arr[10];int i,arr[10];printf("Enter numbers\n");printf("Enter numbers\n");for (i=0;i<10;i++)for (i=0;i<10;i++)

scanf("%d",&arr[i]);scanf("%d",&arr[i]);printf("Even:\n");printf("Even:\n");for (i=0;i<10;i++)for (i=0;i<10;i++)

if (arr[i] % 2 == 0)if (arr[i] % 2 == 0)printf("%d ",arr[i]);printf("%d ",arr[i]);

printf("\nOdd:\n");printf("\nOdd:\n");for (i=0;i<10;i++)for (i=0;i<10;i++)

if (arr[i] % 2 != 0)if (arr[i] % 2 != 0)printf("%d ",arr[i]);printf("%d ",arr[i]);

printf("\n");printf("\n");return 0;return 0;

}}

קלט

פלט

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

מערכים - אתחולמערכים - אתחול

int a[10]int a[10] = {1,2,3}; = {1,2,3};

int a[10]int a[10] = {0}; = {0};

a[0]

a[1]

a[2]

a[9]

1

2

3

0

a[0]

a[1]

a[2]

a[9]

0

0

0

0

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

הגדרת פונקציותהגדרת פונקציות

return-value-typereturn-value-type function-name( function-name(parameter1parameter1, , parameter2parameter2, …), …)

הגדרת סוג הערכים שהפונקציהמחזירה

שם הפונקציה רשימת הערכים שהפונקציהמקבלת

f(x) = x^2f(x) = x^2נממש את הפונקציה נממש את הפונקציה דוגמא:דוגמא:

doubledouble sqr( sqr(double x)double x)

{{

return x*x;return x*x;

}}

הגדרת הפונקציה

גוף הפונקציה

{Function body return-value

}

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

פונקציות- דוגמא נוספתפונקציות- דוגמא נוספת ::נממש את הפונקציה שמוצאת את המינימום בין שלושה מספריםנממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים

intint minimum( minimum( intint x, x, intint y, y, intint z ) z )

{{

int int minmin = x; = x;

if ( y < min )if ( y < min )

min = y;min = y;

if ( z < min )if ( z < min )

min = z;min = z;

return min;return min;

}}

משתנה מקומי שמוכר רקבתוך הפונקציה

x

y

z

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

שימוש בפונקציותשימוש בפונקציות

int main()int main()

{{

int a, b, c;int a, b, c;

printf( "Enter three integers: " );printf( "Enter three integers: " );

scanf( "%d%d%d", &a, &b, &c );scanf( "%d%d%d", &a, &b, &c );

printf( "Min is: %d\n", printf( "Min is: %d\n", minimumminimum( ( a, b, ca, b, c ) ); ) );

return 0;return 0;

}}

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

שימוש בפונקציותשימוש בפונקציותint main()int main()

{{

int a, b, c, min;int a, b, c, min;

printf( "Enter three integers: " );printf( "Enter three integers: " );

scanf( "%d%d%d", &a, &b, &c );scanf( "%d%d%d", &a, &b, &c );

min = min = minimumminimum( ( a, b, ca, b, c ); );

printf( "Min is: %d\n", min);printf( "Min is: %d\n", min);

return 0;return 0;

}}

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

העברת הערכיםהעברת הערכים

משתמש

44

55

22

a

b

c

44

55

22

x

y

z

mainminimum

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

הכרזה על פונקציותהכרזה על פונקציות

return-value-typereturn-value-type function-name( function-name(parameter1parameter1, , parameter2parameter2, …), …);;

הגדרת סוג הערכים שהפונקציהמחזירה

שם הפונקציה הערכים שהפונקציה סוגי רשימת מקבלת

הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית

מאפשרת לנו להשתמש בפונקציה בכל מקום. מאפשרת לנו להשתמש בפונקציה בכל מקום.

doubledouble sqr( sqr( double );double );

intint minimum( minimum( intint, , intint, , intint ); );

int main()int main()

{{

}}

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

22תרגיל תרגיל אם הוא אם הוא 00כתוב פונקציה המקבלת מספר שלם ומחזירה כתוב פונקציה המקבלת מספר שלם ומחזירה

אם כן. הדרכה: אם כן. הדרכה:11לא ראשוני ו- לא ראשוני ו-

int main()int main()

{{

if (IsPrime(if (IsPrime(77) == 1)) == 1)

printf(“printf(“77 is prime”); is prime”);

}}

int IsPrime(int p)int IsPrime(int p)

{{

}}

תוכנית שמשתמשת בפונקציה

הפונקציה )השלימו את הגוף(?

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

- המשך- המשך22תרגיל תרגיל

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

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

- פתרון- פתרון22תרגיל תרגיל

int IsPrime(int num)int IsPrime(int num){{ intint k;k;

for(k = 2 ; k*k <= num; k++)for(k = 2 ; k*k <= num; k++) {{ if (num % k == 0)if (num % k == 0) return 0;return 0; }} return 1;return 1;}}

הפונקציה

לולאה למציאת מחלקים

בדיקה למציאת מספר שמחלק את הקלט לפונקציה

0במידה ונמצא אז להחזיר

אם הגענו לכאן אז אף מחלק לא נמצא והמספר ראשוני

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

- פתרון- פתרון22תרגיל תרגיל

int main()int main(){{

intint num, last;num, last;printf(“Enter a number\n");printf(“Enter a number\n");scanf("%d", &last);scanf("%d", &last);for (num = 2; num <= last; num++)for (num = 2; num <= last; num++)

if (IsPrime(num) == 1)if (IsPrime(num) == 1)printf("%d is prime\n", num);printf("%d is prime\n", num);

return 0; return 0; }}

התוכנית הראשית

לולאה להדפסת כל הראשונים עד למספר שנקלט

בדיקת ראשוניות

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

חישוב ערכים באמצעות לולאות חישוב ערכים באמצעות לולאות

:נתון הסכום הבא

i = 1

n

(-1)i+1 4

2i -1

נכתוב פונקציה שמחשבת אותו

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

חישוב הסכוםחישוב הסכום

double calc_something(int n)double calc_something(int n){{

intint i,key=1;i,key=1;double result = 0;double result = 0;for (i=1; i<=n ;i++)for (i=1; i<=n ;i++){{

result = result + key*(4.0/(2*i-1));result = result + key*(4.0/(2*i-1)); key *= -1;key *= -1;

}}return result;return result;

}}

הפונקציה

החישוב עצמו

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

33תרגיל תרגיל

כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של

החישוב.החישוב.

הדרכה:הדרכה:

זוהי הכרזת הפונקציה:זוהי הכרזת הפונקציה:double calc_something(double eps)double calc_something(double eps){{}}

(-1)i+1 4

2i -1< eps הפונקציה תרוץ עד שיתקיים

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

- פתרון- פתרון33תרגיל תרגיל double calc_something(double eps)double calc_something(double eps){{

intint i=1,key=1;i=1,key=1;doubledouble result = 0,expr;result = 0,expr;dodo{{

expr = 4.00/(2*i-1);expr = 4.00/(2*i-1);result = result + key*expr;result = result + key*expr;i++;i++;key *= -1;key *= -1;

} while (expr >= eps);} while (expr >= eps);return result;return result;

}}

הפונקציה

הדיוק

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

הקשר בין מערכים לפונקציותהקשר בין מערכים לפונקציותכיצד נכתוב פונקציה אשר תקבל כפרמטר מערך ? כיצד נכתוב פונקציה אשר תקבל כפרמטר מערך ?

הפונקציה תקבל מערך )את כתובתו( ותדפיס אותו:הפונקציה תקבל מערך )את כתובתו( ותדפיס אותו:void PrintArray(int a[ ],int size)void PrintArray(int a[ ],int size){{

int i;int i;for (i=0;i<size;i++)for (i=0;i<size;i++)

printf(“%d”,a[i]);printf(“%d”,a[i]);}}

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

הקשר בין מערכים לפונקציותהקשר בין מערכים לפונקציות

הפונקציה תקלוט איברים לתוך מערךהפונקציה תקלוט איברים לתוך מערך

void GetArray(int a[ ],int size)void GetArray(int a[ ],int size){{

int i;int i;for (i=0;i<size;i++)for (i=0;i<size;i++)

scanf(“%d”,&a[i]);scanf(“%d”,&a[i]);}}

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

void PrintArray(int a[ ],int size);

int main(){

int a[10];

GetArray(a,10);PrintArray(a,10);return 0;

}

void GetArray(int a[ ],int size);

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

מחרוזותמחרוזותמחרוזת זה מערך של תווים אשר מחרוזת זה מערך של תווים אשר מחרוזת – מחרוזת –

. . ’’00‘\‘\מסתיים ב מסתיים ב

a[0]

a[1]

a[2]

a[3]

5000

5001

5002

a[4]

a[5]

5003

5004

5005

‘S’

‘h’

‘a’

‘i’

‘\0’

char a[6] = “Shai”;

printf(“%s”,a);

s%הדפסה באמצעות

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

מחרוזותמחרוזות מאפשר לנו להעביר מחרוזות מאפשר לנו להעביר מחרוזות ’’00‘\‘\ הסיום בהסיום ב

לפונקציות מבלי לציין את גודלם!!!לפונקציות מבלי לציין את גודלם!!!פונקציה טיפוסית של מחרוזות תראה כך:פונקציה טיפוסית של מחרוזות תראה כך:

void string_func(char s[ ]){

int k;…

while (s[k] != ’\0’)…{

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

#include <stdio.h>#include <stdio.h>int strlen(char str[ ])int strlen(char str[ ]){{

intint k = 0;k = 0; while ( str[k] != ’\0’ )while ( str[k] != ’\0’ )

k++;k++; return k;return k;}}int main()int main(){{

char str[ ]=“LINUX";char str[ ]=“LINUX";printf("%d",strlen(str));printf("%d",strlen(str));return 0;return 0;

}}

? מה קורה פה

N U XIL ‘\0’

str

str[k]

100 101 102 103 104105 106