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

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

ממיבחניםC שאלות ++.
מבוא למדעי המחשב לתעשייה וניהול
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
צורה נורמלית של גרייבך הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
מכונת מצבים תרגול מס' 4 Moshe Malka.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
מתמטיקה בדידה תרגול 3.
מבוא למדעי המחשב תרגול 2 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
אוטומט מחסנית הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
The Game of Life טיפולוגית PVM. John Conway ד"ר ג'ון קונווי – פרופסור למתמטיקה סופית ((Finite Mathematics באוניברסיטת פרינסטון. ד"ר ג'ון קונווי – פרופסור.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
צורות נורמליות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 10.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
נוצר ע " י ד " ר ארקדי שטיינבוק Visual Basic for Application VBA כדוגמה VBA ב - WORD.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
אלכסנדר ברנגולץ דואר אלקטרוני: אלכסנדר ברנגולץ דואר אלקטרוני: פעולות מורפולוגיות.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Kashrut is a mitzvah in the Torah and has been passed on through generations. Kashrut is a chok. this means that we don’t know why we do it but we.
1 Data Structures CSCI 132, Spring 2014 Lecture 4 Implementing Life.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
תרגיל כיתה 7 מבוא לטכנולוגיות מחשב CPE. – 2 – ארכיטקטורה של מעבד מודרני Execution Functional Units Instruction Control Integer/ Branch FP Add FP Mult/Div.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
Defining a 2d Array A 2d array implements a MATRIX. Example: #define NUMROWS 5 #define NUMCOLS 10 int arr[NUMROWS][NUMCOLS];
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
1 For Loops l From Chapter 9 l A shorthand way of coding count loops.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
Arrays float Scores[9]; ? index: element // one dimensional array 1.
Arrays float Scores[9]; ? index: element // one dimensional array 2.
Introduction to Programming
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
I/O Streams File I/O 2-D array review
CS 1430: Programming in C++.
Multi-dimensional Array
תירגול 14: מבני נתונים דינאמיים
Programming -2 برمجة -2 المحاضرة-5 Lecture-5.
Repetition Statements
מבוא לתכנות בWINDOWS ב#C
מבוא כללי למדעי המחשב תרגול 4
עקרונות בסיסיים בתכנות Visual Basic
Engineering Programming A
Presentation transcript:

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

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

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

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

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

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 משחק החיים התוכנית אותה נכתוב תריץ סימולציה בשלבים. כל שלב ידמה דור אחד.

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

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 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 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 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 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 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 int islive(int i) { if (i > 0) return 1; else return 0; }

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

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