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

Post on 19-Dec-2015

228 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

::שבועשבוע

4.12.054.12.05

ee חישוב חישוב

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

1 + 1n

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 קביעת

הביטוי:

העלאה בחזקה:

eexxחישוב חישוב

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

1 + xn

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;

}

תרגילתרגיל

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

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

2

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

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

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

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

}

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

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

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

מספרים מספרים 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

משתנה בודד

מערך

גישה למשתנה

השלישי במערך

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

}}

קלט

פלט

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

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

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

#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");}}

קלט

פלט

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

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

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

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

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

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

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

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

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

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

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

}}

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

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

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

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

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

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

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

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

rand() % 20rand() % 20

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

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

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

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

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

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

, ניתן לקבוע ע"י , ניתן לקבוע ע"י 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כאשר הפונקציה כאשר הפונקציה

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

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

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

דוגמה לפלט:231227314647310.0168770.5540640.4000060.7842950.4818570.4877770.724479

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

}}

פתרוןפתרון

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

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

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

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

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

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

top related