פונקציות ורקורסיה. פונקציות פונקציה: קטע קוד בעל שם ייחודי המבצע פעולה ניתן לקרוא לפונקציה במסגרת main (או במסגרת פונקציה אחרת) על ידי כתיבת שמה והפרמטרים.

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
Sort the given string, without using string handling functions.
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
מתמטיקה בדידה תרגול 3.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
אתחול מערך void main() { int i; int ar1[5]={7,3,4,5,2}; int ar2[]={9,3,3,4,6};/*the size is 5*/ int ar3[5]={3,2};/*the other nums are 0*/ int ar4[3];/*garbage*/
תכנות תרגול 9 שבוע : מערכים int a; a=5; int a[10]; a[2] = 5; 5 a a[0] a[1] a[2] a[9]  5 משתנה בודד מערך גישה למשתנה השלישי במערך.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Data Structures, CS, TAU, Splay Tree 1 Splay Tree - עץ חיפוש בינארי - מטרה לדאוג ל - Amortized Time - פעולה בודדת יכולה לקחת O(N) - אבל כל רצף M פעולות.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
תכנות תרגול 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 תרגול
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 5 שבוע : לולאות for לולאות for for (counter=1 ;counter
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבנה מחשבים תרגול מספר 3. טענה על עצים משפט: בעץ שדרגת כל קודקודיו חסומה ב-3, מספר העלים ≤ מספר הקודקודים הפנימיים + 2. הוכחה: באינדוקציה על n, מספר הקודקודים.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
מבוא למדעי המחשב תרגול 5 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
תוכנה 1 תרגול מס ' 3 מערכים ומבני בקרה. 2 מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
מבוא למדעי המחשב הרצאה 9: תכנות רקורסיבי 2 1. חישוב עצרת: רקורסיית זנב public static int fact (int n){ return factacc(n,1); } public static int factacc.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
תוכנה 1 תרגול 2: מערכים, לולאות והתמודדות עם שגיאות.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
 Last Lecture Reminder  Array Sorts  Exam Questions Examples  Open Questions ◦ Search Engines ◦ Operating Systems ◦ Multiple Files in Projects  Additional.
 Recursion  Pointers and Arrays #include void print3(int n){ if (n==0)return; printf ("%d\n",n); print3(n-1); printf ("%d\n",n); } void main(){ print3(5);
C Programming.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
C Programming.
Programming Arrays.
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
מבוא למדעי המחשב סיבוכיות.
רקורסיות קרן כליף.
מצביעים קרן כליף.
מבוא כללי למדעי המחשב פונקציות
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
מערכים של מצביעים הקצאה דינאמית
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

פונקציות ורקורסיה

פונקציות פונקציה: קטע קוד בעל שם ייחודי המבצע פעולה ניתן לקרוא לפונקציה במסגרת main (או במסגרת פונקציה אחרת) על ידי כתיבת שמה והפרמטרים יתרונות –שימוש חוזר –קל לתחזוק –מודולאריות – חלוקת המשימה לתתי משימות עצמאיות –אינקפסולציה – המשתמש לא חייב לדעת את פרטי המימוש

פונקציה שמחזירה ערך ופונקציה void ישנן פונקציות שמחשבות חישובים ומחזירות את התוצאה למי שקרא לה (לדוגמא pow, sin, strlen) יש פונקציות שרק מבצעות פעולות (כמו קלט ופלט) ולא מחשבות תוצאה שהתכנית תשתמש בה. לפונקציות כאלה קוראים void דוגמא: –לא void: a=min(x,y); –void: printNumber(a);

הגדרה ושימוש בפונקציה (<parameters list){ return ; } void main(){ … ( ); }

#include #define SIZE 100 void main() { int i, j, min, temp, nums[SIZE]; for (i=0; i<10; i++){ printf ("enter number\n"); scanf ("%d",&nums[i]); } for (i=0; i<SIZE; i++){ min = i; for (j=i+1; j<SIZE; j++) if (nums[j]<nums[min]) min = j; temp = nums[i]; nums[i] = nums[min]; nums[min] = temp; } for (i=0; i<SIZE; i++) printf ("%d\n",nums[i]); }

#include #define SIZE 100 void selectionSort(int ar[], int size){ int i, minInd; for (i=0; i<SIZE; i++){ minInd= findMinIndex(ar, size); swapElements(ar, i, minInd); } void main(){ int ar[SIZE]; readArrayFromUser(ar, SIZE); selectionSort(ar, SIZE); printArray(ar, SIZE) } יש להשלים את הפונקציות החסרות

הערות פונקציה יכולה לקבל יותר מפרמטר אחד פונקציה יכולה להכיל יותר משורת return אחת. שורת הreturn הראשונה שהפונקציה תיתקל בה תגרום לחזרה למי שקרא לפונקציה פונקציה void לא צריכה return בסוף פונקציה לא יכולה לשנות פרמטרים "פשוטים" (int, char), אבל יכולה לשנות מערכים (נלמד בהמשך את מקור ההבדל) פונקציה יכולה לקרוא לפונקציה אחרת

מערכים כפרמטרים אם רוצים מערך חד מימדי כפרמטר יש לרשום [ ] אם רוצים מערך דו מימדי כפרמטר יש לרשום [ ] [ ] דוגמאות: void selectionSort(int ar[], int size); void createBoard (int board [][8]);

אינדוקציה ממקרה בסיס וכלל התקדמות מגיעים להוכחת הטענה לכל המספרים. ההוכחה באינדוקציה הראשונה בהסטוריה (1575): סכום n המספרים האיזוגיים הראשונים שווה n 2 מקרה בסיס 1=1 2 נניח שהטענה נכונה עבור n כלשהו …+(2n-1)+(2n+1) = n 2 +(2n+1) = (n+1) 2

חישוב n! ברקורסיה int recFactorial(int n){ if(n<=1) return 1; return n*recFactorial(n-1); }

רקורסיה ללא מקרה בסיס #include void star(int n){ printf("*"); star (n-1); } void main(){ star(3); }

הדפסת כוכביות #include void star(int n){ if (n<=0) return; printf("*"); star (n-1); } void main(){ star(3); }

Merge Sort void mergeSort(int ar[],int lo,int hi){ if (lo<hi) { int m=(lo+hi)/2; mergeSort(ar,lo, m); mergeSort(ar, m+1, hi); merge(ar, lo, m, hi); }

Merge #define SIZE 100 void merge(int a[],int lo,int m, int hi){ int i, j, k, b[SIZE]; for (i=lo; i<=hi; i++) b[i]=a[i]; i=lo; j=m+1; k=lo; while (i<=m && j<=hi) if (b[i]<=b[j]) a[k++]=b[i++]; else a[k++]=b[j++]; while (i<=m) a[k++]=b[i++]; }

print1 #include void print1(int n){ if (n==0)return; printf ("%d\n",n); print1(n-1); } void main(){ print1(5); }

print2 #include void print2(int n){ if (n==0)return; print2(n-1); printf ("%d\n",n); } void main(){ print2(5); }

print3 #include void print3(int n){ if (n==0)return; printf ("%d\n",n); print3(n-1); printf ("%d\n",n); } void main(){ print3(5); }

print4 #include void print4(int n){ if (n==0)return; print4(n-1); printf ("%d\n",n); print4(n-1); } void main(){ print4(4); }

חישוב מספר פיבונאצ'י int recFib(int n){ if(n<=1) return n; return recFib(n-1)+ recFib(n-2); }

מגדלי הנוי בתחילת המשחק מונחות הדיסקיות על עמוד אחד מסודרות לפי גודל המטרה היא להעביר את כל הדיסקיות לעמוד האחרון בכל צעד מותר להעביר דיסקית אחת, ואסור לשים דיסקית גדולה על קטנה

פתרון עבור 4 דיסקיות

#include void moveDisk(int num, char from[], char to[]){ printf ("move disk %d from %s to %s\n", num,from,to); } void hanoi (int numDisks, char first[], char last[], char help[]){ if (numDisks == 1){ moveDisk(numDisks, first, last); } else{ hanoi(numDisks - 1, first, help, last); moveDisk(numDisks, first, last); hanoi(numDisks - 1, help, last, first); } void main(){ hanoi(3,"A","C","B"); }

output move disk 1 from A to C move disk 2 from A to B move disk 1 from C to B move disk 3 from A to C move disk 1 from B to A move disk 2 from B to C move disk 1 from A to C

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