Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 מבוא לתכנות – תוכנה פונקציות. 2 משחק החיים של Conway The Game of life סימולצית פעילות מערכת תאים שפותחה על ידי המתמטיקאי הבריטי ג'ון הורטון קונווי בשנת.

Similar presentations


Presentation on theme: "1 מבוא לתכנות – תוכנה פונקציות. 2 משחק החיים של Conway The Game of life סימולצית פעילות מערכת תאים שפותחה על ידי המתמטיקאי הבריטי ג'ון הורטון קונווי בשנת."— Presentation transcript:

1 1 מבוא לתכנות – תוכנה פונקציות

2 2 משחק החיים של Conway The Game of life סימולצית פעילות מערכת תאים שפותחה על ידי המתמטיקאי הבריטי ג'ון הורטון קונווי בשנת 1970. מאז ועד היום מתמטיקאים ואנשי מדעי המחשב לא מפסיקים להתפעל מהמחשק, בעיקר כיוון שההוא מדגים כיצד מספר כללים פשוטים יכולים להניב תוצאות מורכבות ומפתיעות.

3 3 משחק החיים המרחב של סימולציית משחק החיים הוא על לוח משבצות (דו-מימדי) אינסופי. כל משבצת נחשבת ליחידה, שנקרא לה תא. תא יכול להיות במצב של "חיים" או "מוות". כדי לסמן זאת, נקבע כי משבצת מלאה היא תא "חי", ומשבצת ריקה היא תא "מת".

4 4 משחק החיים כללי המשחק: –המשחק מתחיל ממצב התחלתי כלשהו, בו חלק מהתאים בלוח חיים וחלקם מתים. –מצב התאים במהלך המשחק משתנה בהתאם למספר כללים שקובעים את מצבם בכל רגע נתון במשחק. נהוג לכנות מצב נתון כ-"דור". –בכל דור נולדים ומתים תאים לפי הכללים הבאים: לידה, מוות, הישרדות

5 5 משחק החיים כללי המשחק: –לידה – אם למשבצת ריקה יש שלושה שכנים חיים, אז בשלב הבא יהיה בה יצור חי. –תא חי ימות אם: יש לו שכן חי אחד או פחות (ימות מבדידות). יש לו ארבעה שכנים חיים או יותר (ימות מצפיפות יתר). זיקנה - התא חי במשך X שנים. X

6 6 משחק החיים דוגמאות למצבים יציבים: Block (still life) Boat (still life) Blinker (two-phase oscillator) Toad (two-phase oscillator) Glider (spaceship) Lightweight spaceship (LWSS) Pulsar (three-phase oscillator)

7 7 משחק החיים התוכנית אותה נכתוב תריץ סימולציה בשלבים. כל שלב ידמה דור אחד.

8 8 משחק החיים מבנה הנתונים: –מערך דו-מימדי בגודל SIZE X SIZE – מתאר את מצב הלוח: 1- : המשבצת נמצאת על גבול הלוח. 0 : המשבצת ריקה. 1,2,3...OLD_AGE : התא חי. המספר מיצג את גיל התא.

9 9 #include #define SIZE 22 #define OLD_AGE 4 void init_array(int arr[SIZE][SIZE], int rect_size); void print_array(int arr[SIZE][SIZE]); int islive(int i); int calc_next(int arr[SIZE][SIZE],int line,int col); void next_stage(int arr1[SIZE][SIZE],int arr2[SIZE][SIZE]); int main() { int arr1[SIZE][SIZE]; int arr2[SIZE][SIZE]; int last; init_array(arr1, 5); cout << "Enter # of iterations : "; cin >> last; int i; for (i = 1 ; i <= last ; i++) { cout << "Stage # " << i << endl; cout << "==========" << endl; if (i % 2 == 1) { print_array(arr1); next_stage(arr1,arr2); } else { print_array(arr2); next_stage(arr2,arr1); } system("PAUSE"); } system("PAUSE"); return 0; } הצהרה על פונקציות התוכנית הראשית main

10 10 int main() { int arr1[SIZE][SIZE]; int arr2[SIZE][SIZE]; int last; init_array(arr1, 5); cout << "Enter # of iterations : "; cin >> last; int i; for (i = 1 ; i <= last ; i++) { cout << "Stage # " << i << endl; cout << "==========" << endl; if (i % 2 == 1) { // for odd stages print_array(arr1); next_stage(arr1,arr2); } else { // for even stages print_array(arr2); next_stage(arr2,arr1); } system("PAUSE"); } system("PAUSE"); return 0; } קריאה לפונקציה שליחת משתנה מסוג מערך לפונקציה, שולחת את כתובתו ולא מעתיקה אותו ( כמו קריאה by reference)

11 11 void init_array(int arr[SIZE][SIZE], int rect_size) { int i,j; int rect_start_idx = (SIZE - rect_size + 1) / 2; int rect_end_idx = SIZE - (SIZE - rect_size) / 2 - 1; /* coding: -1 : boundary 0 : empty spot 1 : occupied spot */ for (i = 0 ; i < SIZE ; i++) { for (j = 0 ; j < SIZE ; j++) { if (i == 0 || j == 0 || i == SIZE - 1 || j == SIZE - 1) arr[i][j] = -1; // boundary else if (i rect_end_idx || j > rect_end_idx) arr[i][j] = 0; // empty spots else arr[i][j] = 1; // occupied spots }

12 12 void print_array(int arr[SIZE][SIZE]) { int i,j; for (i = 0 ; i < SIZE ; i++) { for (j = 0 ; j < SIZE ; j++) { if (arr[i][j] > 0) cout << arr[i][j]; // occupied else if (arr[i][j] < 0) cout << ".";//boundries else cout << " ";//empty } cout << endl; }

13 13 void next_stage(int cur[SIZE][SIZE],int next[SIZE][SIZE]) { int i,j; for (i = 0 ; i < SIZE ; i++) { for (j = 0 ; j < SIZE ; j++) { next[i][j] = calc_next(cur,i,j);calc_next(cur,i,j); }

14 14 int calc_next(int arr[SIZE][SIZE],int row,int col) { if (arr[row][col] >= OLD_AGE) return 0; if (arr[row][col] < 0) return -1; int n = 0; // count number of living neighbors if (row > 0 && row 0 && col < SIZE - 1) { n = islive(arr[row-1][col-1]) + islive(arr[row-1][col]) + islive(arr[row-1][col + 1])islive + islive(arr[row][col-1]) + islive(arr[row][col + 1]) + islive(arr[row+1][col-1]) + islive(arr[row+1][col]) + islive(arr[row+1][col + 1]); } if (arr[row][col] > 0) { if (n < 2) return 0; if (n >= 4) return 0; return arr[row][col] + 1; } if (n == 3) return 1; return 0; }

15 15 int islive(int i) { if (i > 0) return 1; else return 0; }

16 16 תרגיל - כפל מטריצות כתוב תכנית הקולטת שתי מטריצות (3*3) התכנית תיצור את מטריצת הכפל שלהן. פלט התכנית יהיה הדפסה של מטריצת הכפל.

17 17 void read_matrix(double matrix[MAX_ROWS][MAX_COLS]) { for (int rCounter = 0; rCounter < MAX_ROWS; rCounter++) for (int cCounter = 0; cCounter < MAX_COLS; cCounter++) cin >> matrix[rCounter][cCounter]; } void write_matrix(const double matrix[MAX_ROWS][MAX_COLS]) { for (int rCounter = 0; rCounter < MAX_ROWS; rCounter++) { for (int cCounter = 0; cCounter < MAX_COLS; cCounter++) cout << matrix[rCounter][cCounter] << " "; cout << endl; } void matrix_multip(const double matrix1[MAX_ROWS][MAX_COLS], const double matrix2[MAX_ROWS][MAX_COLS], double result[MAX_ROWS][MAX_COLS]) { for (int rCounter = 0; rCounter < MAX_ROWS; rCounter++) { for (int cCounter = 0; cCounter < MAX_COLS; cCounter++) { result[rCounter][cCounter] = 0; // reset the result matrix for (int i= 0; i < MAX_ROWS; i++) { result[rCounter][cCounter] += matrix1[rCounter][i]*matrix2[i][cCounter]; }

18 18 const int MAX_ROWS =10; const int MAX_COLS =10; int main() { // for input double num_matrix1 [MAX_ROWS][MAX_COLS]; double num_matrix2 [MAX_ROWS][MAX_COLS]; // for output double res_matrix [MAX_ROWS][MAX_COLS]; read_matrix(num_matrix1); read_matrix(num_matrix2); matrix_multip(num_matrix1, num_matrix2, res_matrix); write_matrix(res_matrix); return 0; }


Download ppt "1 מבוא לתכנות – תוכנה פונקציות. 2 משחק החיים של Conway The Game of life סימולצית פעילות מערכת תאים שפותחה על ידי המתמטיקאי הבריטי ג'ון הורטון קונווי בשנת."

Similar presentations


Ads by Google