תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e...

27
ללללל ללללל ללללל ללללל6 6 לללל לללל: : 4.12.05 4.12.05

Post on 19-Dec-2015

228 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

66 תכנות תרגולתכנות תרגול

::שבועשבוע

4.12.054.12.05

Page 2: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

ee חישוב חישוב

נראה כיצד לתרגם eזוהי הנוסחא לחישוב אותה לפונקציה.

1 + 1n

n

Page 3: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

#include <stdio.h>double CalcE(int last);int main(){

int last;printf("Enter number of iterations\n");scanf("%d", &last);printf("%lf\n", CalcE(last));

}

double CalcE(int last){

int i;double e = 1, mul = 1 + 1 / (double)last;for(i = 1; i <= last; i++)

e *= mul;return e;

}

n קביעת

הביטוי:

העלאה בחזקה:

Page 4: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

eexxחישוב חישוב

x ואת nכתוב פונקציה המקבלת את באמצעות הנוסחה exומחשבת את

1 + xn

n

Page 5: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

הפונקציההפונקציה

double CalcE(int last,int power){

int i;double e = 1;

double mul = 1 + power / (double)last;for(i = 1; i <= last; i++)

e *= mul;return e;

}

Page 6: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

תרגילתרגיל

שורש של מספר מחושב לפי הסדרה הבאה:

root0 = 1rootn = rootn-1 + a / rootn-1

2

של הסדרה הוא קירוב nכאשר האיבר ה- גדל.n. הקירוב משתפר ככל ש-aלשורש של

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

:תנאי העצירה של החישוב יהיה כאשרrootn == rootn-1

Page 7: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

פתרוןפתרוןdouble MySqrt(int num){

double root, root_n = 1.0;do{

root = root_n;root_n = (root + num / root) / 2;

}while(root_n != root);return root;

}

Page 8: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

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

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

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

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

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

Page 9: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

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

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 10: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

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

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 11: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

void main()void 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]);

}}

קלט

פלט

Page 12: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

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

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

הזוגיים ואחר כך את כל האיברים האי זוגייםהזוגיים ואחר כך את כל האיברים האי זוגייםEnter numbers12345678910Even:2 4 6 8 10Odd:1 3 5 7 9

Page 13: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

#include <stdio.h>#include <stdio.h>#define SIZE 10#define SIZE 10

void main()void main(){{

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

scanf("%d",&arr[i]);scanf("%d",&arr[i]);printf("Even:\n");printf("Even:\n");for (i=0;i<SIZE;i++)for (i=0;i<SIZE;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<SIZE;i++)for (i=0;i<SIZE;i++)

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

printf("\n");printf("\n");}}

קלט

פלט

Page 14: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

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

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 15: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

תרגילתרגיל איברים התוכנית איברים התוכנית 1010כתוב תוכנית המגדירה מערך אחד עם כתוב תוכנית המגדירה מערך אחד עם

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

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

Page 16: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

#define SIZE_A 10#define SIZE_A 10int main()int main(){{

int i,A[SIZE_A],x;int i,A[SIZE_A],x;for (i = 0; i < SIZE_A; i++)for (i = 0; i < SIZE_A; i++)

scanf(“%d”,&A[i])scanf(“%d”,&A[i])scanf(“%d”,&x);scanf(“%d”,&x);for (i = 0; i < SIZE_A; i++)for (i = 0; i < SIZE_A; i++)

if ( A[i]== x )if ( A[i]== x )printf(“%d appears in printf(“%d appears in

%d”,x ,i);%d”,x ,i);}}

Page 17: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

תרגילתרגיל איברים ואחד איברים ואחד 33כתוב תוכנית המגדירה שני מערכים אחד עם כתוב תוכנית המגדירה שני מערכים אחד עם

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

היא מדפיסה איפה ואם לא היא לא מדפיסה דברהיא מדפיסה איפה ואם לא היא לא מדפיסה דבר

Page 18: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

100 11 2231 445 35 15 22 445 35

קלט

4-6פלט

a b

22 445 35 17 15

0 1 2 3 4 5 6 7 8 9 0 1 2

Page 19: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

#define SIZE_A 10#define SIZE_A 10#define SIZE_B 3#define SIZE_B 3int main()int main(){{

int i, j;int i, j;int A[SIZE_A],B[SIZE_B];int A[SIZE_A],B[SIZE_B];for (i = 0; i <= SIZE_A – SIZE_B; i++)for (i = 0; i <= SIZE_A – SIZE_B; i++){{

for (j = 0; j < SIZE_B; ++j)for (j = 0; j < SIZE_B; ++j)if ( A[i + j] != B[j] )if ( A[i + j] != B[j] )

break;break;if (j == SIZE_B)if (j == SIZE_B)

printf(“Range %d-%d”,i ,i + SIZE_B);printf(“Range %d-%d”,i ,i + SIZE_B);}}

}}

Page 20: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

מספרים אקראייםמספרים אקראיים

ניתן לייצר מספרים אקראיים ע"י הפונקציהניתן לייצר מספרים אקראיים ע"י הפונקציה•

int rand(void);int rand(void);

הפונקציה מייצרת מספר אקראי שלם הפונקציה מייצרת מספר אקראי שלם •RAND_MAXRAND_MAX עד עד 00בתחום בתחום

32,76732,767 הוא לפחות הוא לפחות RAND_MAXRAND_MAXמובטח ש-מובטח ש-•

stdlib.hstdlib.hהפונקציה מוגדרת ב-הפונקציה מוגדרת ב-•

Page 21: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

דוגמאותדוגמאות

)כולל(: )כולל(:1919 ל- ל-00יצירת מספר אקראי שלם בין יצירת מספר אקראי שלם בין •

rand() % 20rand() % 20

)כולל(: )כולל(:2020 ל- ל-1010יצירת מספר אקראי שלם בין יצירת מספר אקראי שלם בין •

rand() % 11 + 10rand() % 11 + 10

::[[0,10,1]]יצירת מספר אקראי ממשי בתחום יצירת מספר אקראי ממשי בתחום •

(double) rand() / RAND_MAX(double) rand() / RAND_MAX

Page 22: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

יצירת מספרים אקראיים - אתחוליצירת מספרים אקראיים - אתחול

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

, ניתן לקבוע ע"י , ניתן לקבוע ע"י seedseedאת נקודת ההתחלה, ה-את נקודת ההתחלה, ה-•::stdlib.hstdlib.hהפונקציה הבאה המוגדרת ב-הפונקציה הבאה המוגדרת ב-

void srand(unsigned int seed);void srand(unsigned int seed);

יהיה שונה בכל ריצה, יש לכתוב יהיה שונה בכל ריצה, יש לכתוב seedseedכדי שה-כדי שה-•בתחילת התוכנית את הפקודה הבאה:בתחילת התוכנית את הפקודה הבאה:

srand(time(NULL));srand(time(NULL));

time.htime.h מוגדרת ב- מוגדרת ב-)()(timetimeכאשר הפונקציה כאשר הפונקציה

Page 23: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

תרגילתרגיל מספרים אקראיים מספרים אקראיים77כתוב תוכנית המדפיסה כתוב תוכנית המדפיסה

)כולל(, ואח"כ מדפיסה )כולל(, ואח"כ מדפיסה5050 עד עד 55 שלמים בתחום שלמים בתחום

..[[0,10,1]] מספרים אקראיים ממשיים בתחום מספרים אקראיים ממשיים בתחום 77

דוגמה לפלט:231227314647310.0168770.5540640.4000060.7842950.4818570.4877770.724479

Page 24: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <time.h>#include <time.h>

int rand_int()int rand_int()

{{

return rand() % 46 + 5;return rand() % 46 + 5;

}}

double rand_real()double rand_real()

{{

return (double) rand() / RAND_MAX;return (double) rand() / RAND_MAX;

}}

פתרוןפתרון

Page 25: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

פתרון - המשךפתרון - המשך

int main()int main(){{ int k;int k;

srand(time(NULL));srand(time(NULL)); for ( k=0; k<7; k++ )for ( k=0; k<7; k++ ) printf("%d\n",rand_int());printf("%d\n",rand_int()); for ( k=0; k<7; k++ )for ( k=0; k<7; k++ ) printf("%lf\n",rand_real()); printf("%lf\n",rand_real()); return 0;return 0;}}

Page 26: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

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

פעמיים פעמיים 60006000נכתוב תוכנית שזורקת קובייה נכתוב תוכנית שזורקת קובייה

ונספור כמה פעמיים יצא כל מספר.ונספור כמה פעמיים יצא כל מספר.

Page 27: תכנות תרגול 6 שבוע : 4.12.05. חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#define SIZE 7#define SIZE 7int main()int main(){{ int num, face, roll, frequency[ SIZE ] = { 0 }; int num, face, roll, frequency[ SIZE ] = { 0 }; scanf("%d",&num);scanf("%d",&num); srand( num );srand( num ); for ( roll = 1; roll <= 6000; roll++ ) {for ( roll = 1; roll <= 6000; roll++ ) { face = rand() % 6 + 1;face = rand() % 6 + 1; ++frequency[ face ]; ++frequency[ face ]; }} printf( "%s%17s\n", "Face", "Frequency" );printf( "%s%17s\n", "Face", "Frequency" ); for ( face = 1; face <= SIZE - 1; face++ )for ( face = 1; face <= SIZE - 1; face++ ) printf( "%4d%17d\n", face, printf( "%4d%17d\n", face,

frequency[ face ] );frequency[ face ] ); return 0;return 0;}}