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

Preview:

DESCRIPTION

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

Citation preview

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

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

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

{{

loop bodyloop body

}}

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

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

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

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

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

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

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

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

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

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

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

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,…);

}}

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

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

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

משתנה בודד

מערך

גישה למשתנה

השלישי במערך

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;

}}

קלט

פלט

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

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

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

#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;

}}

קלט

פלט

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

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

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

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

}

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

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

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

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;

}}

שימוש בפונקציותשימוש בפונקציות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;

}}

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

משתמש

44

55

22

a

b

c

44

55

22

x

y

z

mainminimum

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

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()

{{

}}

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)

{{

}}

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

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

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

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

- פתרון- פתרון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במידה ונמצא אז להחזיר

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

- פתרון- פתרון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; }}

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

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

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

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

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

i = 1

n

(-1)i+1 4

2i -1

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

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

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;

}}

הפונקציה

החישוב עצמו

33תרגיל תרגיל

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

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

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

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

(-1)i+1 4

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

- פתרון- פתרון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;

}}

הפונקציה

הדיוק

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

הפונקציה תקבל מערך )את כתובתו( ותדפיס אותו:הפונקציה תקבל מערך )את כתובתו( ותדפיס אותו: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]);}}

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

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

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]);}}

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);

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

. . ’’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%הדפסה באמצעות

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

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

void string_func(char s[ ]){

int k;…

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

#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

Recommended