Computer Programming תרגול 6 פונקציות

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול
Advertisements

מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב תרגול. הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת.
תכנות תרגול 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 תרגול
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 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, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 14 שבוע:
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 3 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא ידעו.
תכנות תרגול 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 דוא " ל :
פונקציות תכנות בשפת סי תרגול 6.
מערכים דו ממדי ו STRUCTS פונקציות בוליאנית Module Module1 Function Flip(ByVal word1 As String) As Boolean Dim i As Integer For i = 0 To word1.Length()
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב תרגול 7. מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
מבוא למדעי המחשב תרגול 5 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
Programming Arrays. Example 1 Write a program that reads 3 numbers from the user and print them in reverse order. How many variables do we need to store.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
מבוא למדעי המחשב סיבוכיות.
מ- JAVA ל- C קרן כליף.
תירגול 14: מבני נתונים דינאמיים
Computer Programming תרגול 6 פונקציות
Engineering Programming A
פונקציות קרן כליף.
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
מבוא כללי למדעי המחשב תרגול 6
Computer Programming Fall 2012 תרגול 6 פונקציות
מערכים של מצביעים הקצאה דינאמית
תרגול Introduction to C - Fall Amir Menczel.
תירגול 8:מצביעים והקצאה דינאמית
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

Computer Programming תרגול 6 פונקציות Introduction to C - Fall 2010 - Amir Menczel

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

הכרזה והגדרה של פונקציות הכרזה (אבטיפוס של הפונקציה = function prototype): ; (return-type function-name(arguments declaration הגדרה: return-type function-name(arguments) { function body… }       לפני השימוש בפונקציה חייבים להכריז או להגדיר את הפונקציה! ערך מוחזר: יכול להיות כל טיפוס שקיים ב-C (int, float, וכו'). או void (פונקציה המוגדרת עם טיפוס החזרה void לא מחזירה ערך).

פונקציות - דוגמה כתוב פונקציה המחשבת ומחזירה את המספר הגדול ביותר בין שלושת המספרים השלמים המועברים לפונקציה כפרמטרים: #include<stdio.h> int max3(int,int,int); //function prototype void main() { int a,b,c; //input variables printf("enter 3 integers : "); scanf("%d%d%d",&a,&b,&c); printf("maximum integer is : %d\n",max3(a,b,c)); } int max3(int x,int y,int z) //function definition int max; //help variable max=x; if(y>max) max=y; if(z>max) max=z; return max;

פונקציות - דוגמה #include<stdio.h> כתוב תוכנית הקולטת 30 מספרים שלמים, מחשבת ומדפיסה את המספר הגדול ביותר בין כל המספרים הנקלטים. נשתמש בפונקציה max3 . #include<stdio.h> int max3(int,int,int); //function prototype void main() { int a, b, c, i, max; scanf("%d%d%d",&a,&b,&c); max= max3(a,b,c); for (i=1;i<10;i++) { if (max3(a,b,c)>max) } printf ("max= %d\n",max); /*Here we will place the implementation of max3*/

העברת ארגומנטים הערכים המועברים אל הפונקציה כפרמטרים מועתקים. לכן, כל שינוי שהפונקציה תבצע בארגומנטים לא ישתקף מחוץ לפונקציה עצמה. פלט: a=1 b=2

העברת ארגומנטים (המשך) לעומת זאת, אם מעבירים לפונקציה מערך, כל שינוי בתוך המערך עצמו יישמר גם לאחר סיום ריצת הפונקציה. פלט: a[0]=2 a[1]=1

דוגמאות למימוש הפונקציות לטיפול במחרוזות: /****************************************************************** Parameters: s - array of chars, must contain ‘\0’. Returns: length of string that s holds *******************************************************************/ unsigned int strlen(char s[]) { unsigned int len = 0; while (s[len] != ’\0’) len++; return len; } /******************************************************************* Compares two strings lexicographically Parameters: s, t - string to be compared Returns: lexicographical difference between s and t int strcmp(char s[], char t[]) int i; for (i = 0; s[i] == t[i]; i++) if (s[i] == '\0') return 0; e return s[i] - t[i];

תרגיל 1 כתוב תוכנית הקולטת ציונים שקיבלו 100 סטודנטים בקורס תכנות בשפת סי. התוכנית ומדפיסה את המספר הסידורי של הסטודנטים שקיבלו ציון גבוה מהציון הממוצע. #include<stdio.h> #define NUM_STUD 100 /******** Function prototypes *********/ void inputGrades(int [],int); float avg(int [], int); void bestStud(int [],float,int); void main() { int grades[NUM_STUD];//data array float av_mark;//average mark inputGrades(grades,NUM_STUD); av_mark=avg(grades,NUM_STUD); bestStud(grades,av_mark,NUM_STUD); }

תרגיל 1 (המשך פתרון) /******* Function definitions *********/ תרגיל 1 (המשך פתרון) /******* Function definitions *********/ void inputGrade(int arr[],int size) { int i; //loop variable for(i=0;i<size;i++) printf("Enter %d student mark -> ", i+1); scanf("%d", &arr[i]); } float avg(int arr[], int size) int sum=0; // sum of grades int i;//loop variable for (i=0;i<size;i++) sum=sum+arr[i]; return sum/(float)size; void bestStud(int arr[],float av, int size) for(i=0; i<size; i++) if (arr[i]>av) printf("The best student number is %d\n",i+1);

תרגיל 1 (המשך) לדעת המרצה, אם יש יותר מידי מספרים עוקבים שקיבלו ציון מעל הממוצע אז יש חשד להעתקה. במקרה כזה, המרצה רוצה אפשרות לראות כמה סטודנטים מתוך החשודים, עברו את קורס הקדם בציון 90. שנו את הפונקציה הראשית כדי שתתמוך בפעולות הללו. void main() { int grades[NUM_STUD], int SuspeciousGrades[NUM_STUD] = {0}, suspecious=0; float av_mark; inputGrades(grades,NUM_STUD); av_mark=avg(grades,NUM_STUD); bestStud(grades,av_mark,NUM_STUD); printf(“how many students are suspicious?”); scanf(“%d”, suspicious); if(suspicious) inputGrades(SuspeciousGrades, suspicious); bestStud(SuspeciousGrades,90, suspicious); }

תרגיל 2 - סודוקו כתבו תכנית אשר קולטת לוח סודוקו מלא בגודל 9x9 , ובודקת האם הלוח הינו לוח סודוקו חוקי. ניתן להניח שהמשתמש מזין ערכים חוקיים. כלומר מספרים שלמים בין 1 ל-9. לאיזה תתי משימות (פונקציות) נחלק את התכנית?

תרגיל 2 - פיתרון

תרגיל 2 - פיתרון

תרגיל 2 - פיתרון

תרגיל 3 #include <stdio.h> #define MAX 100 כתוב תוכנית הקולטת מספרים שלמים לתוך שני מערכים. אפשר להניח שהמשתמש מכניס מספרים כך שכל מערך ממוין. התוכנית מבצעת מיזוג של שני מערכים לתוך מערך שלישי, כך שהוא יכיל את איברי שני המערכים וגם יהיה ממוין. #include <stdio.h> #define MAX 100 /*This function merges two sorted arrays into a third array.*/ void merge(int arr1[], int n1, int arr2[], int n2, int res[]) { int i, j, k; for (i=0,j=0,k=0; i < n1 && j < n2; k++) if (arr1[i] < arr2[j]) res[k] = arr1[i]; i++; } else res[k] = arr2[j]; j++; /* only one of the two is true */ while(i < n1) res[k++] = arr1[i++]; while(j < n2) res[k++] = arr2[j++]; } //void merge

תרגיל 3 (המשך) int GetValues(int arr[],int arrNum) { תרגיל 3 (המשך) int GetValues(int arr[],int arrNum) { int numOfValues,i; printf(“Enter values for array number %d”,arrNum); scanf(“%d”,&numOfValues); for(i=0; i < numOfValues; i++) printf(“Enter value number %d”,i+1); scanf(“%d”,&arr[i]) } return numOfValues; void main() int n1, n2, i; int a1[MAX], a2[MAX], a3[MAX * 2]; n1 = GetValues(a1,1); n2 = GetValues(a2,2); merge(a1, n1, a2, n2, a3); for (i = 0; i < n1 + n2; ++i) printf("%d ", a3[i]); printf("\n");

תרגיל 4 מערך דו מימדי כפרמטר תרגיל 4 מערך דו מימדי כפרמטר 3 2 1 4 8 11 -2 9 7 נגדיר "פרח" המערך דו מימדי כך: 3X3- האיברים מתוך תת מערך בגודל - האיבר המרכזי במערך הוא "לב הפרח". - ארבעת האיברים הצמודים לו בפינותיו הם "עלי הפרח". - הערך של "לב הפרח" שווה לסכום ערכי "עלי הפרח". מספרים שלמים15X18כתוב תוכנית הקולטת למערך בגודל המערך נקרא "פרחוני", אם יש בו לפחות 5 "פרחים". התוכנית תבדוק אם המערך הוא "פרחוני", ותציג כפלט הודעה מתאימה.

תרגיל 4 - פתרון #include<stdio.h> #define TRUE 1 #define FALSE 0 #define ROW 15 #define COL 18 /*********************** Function prototypes **********************/ void in_arr(int [][COL],int,int); int is_flower(int[][COL],int,int); /***************************************************************/ void main() { int arr[ROW][COL];//input array int count=0;//number of flowers int i,j;//loop counters in_arr(arr,ROW,COL); for(i=0;i<ROW;i++) for(j=0;j<COL;j++) count=count+is_flower(arr,i,j); if(count>=5) printf("Yes\n"); else printf("No\n"); }

תרגיל 4 – פתרון (המשך) /********************* Function definitions **************************/ void in_arr(int a[][COL],int n,int m) { int i,j;//loop counters for(i=0;i<n;i++) for(j=0;j<m;j++) printf("Enter %d row %d col element -> ",i+1,j+1); scanf("%d",&a[i][j]); } int is_flower(int b[][COL],int k,int l) int sum;//sum of flower's elements if(k==0||k==ROW-1||l==0|l==COL-1) return FALSE; sum=b[k-1][l-1]+b[k-1][l+1]+b[k+1][l-1]+b[k+1][l+1]; if(b[k][l]==sum) return TRUE; else

פרח בריבוע הוא פרח שכל אחד מ4 קצוותיו הוא גם מרכז פרח. תרגיל 4 (המשך) מערך דו מימדי מוגדר כמערך פרחוני בריבוע אם הוא פרחוני והוא מכיל לפחות פרח בריבוע אחד. פרח בריבוע הוא פרח שכל אחד מ4 קצוותיו הוא גם מרכז פרח. .שנו את התכנית כך שתבדוק גם אם המערך הוא פרחוני בריבוע int is_flowerSquare(int b[][COL],int k,int l) { int sum;//sum of flower's elements if(k==0||k==ROW-1||l==0|l==COL-1) return FALSE; sum=is_flower(b,k-1,l-1)+is_flower(b,k-1,l+1)+is_flower(b,k+1,l-1)+is_flower(b,k+1,l+1); if(sum==4) return TRUE; else }

נבצע שינוי קטן בפונקציה הראשית: תרגיל 4 (המשך) נבצע שינוי קטן בפונקציה הראשית: void main() { int arr[ROW][COL];//input array int count=0,countSquareFlower = 0;//number of flowers int i,j;//loop counters in_arr(arr,ROW,COL); for(i=0;i<ROW;i++) for(j=0;j<COL;j++) if(is_flower(arr,i,j)) count=count++; countSquareFlower += is_flowerSquare(arr,i,j) } if(count>=5) printf(“Yes\n"); if(countSquareFlower) printf(“Square\n"); else printf("No\n"); איך התשובה הייתה נראית אם לא היינו משתמשים בפונקציות?

תרגיל 5 פיתוח הבינום של ניוטון מוגדר באופן הבא: n משולש פסקל הוא סידור של מקדמי הבינום, המסומנים ב- , בצורה של משולש שווה שוקיים, כאשר הוא למעשה מספר השורה של המקדם במשולש ו-kהוא מיקומו בשורה זו (מספור השורות והמיקומים בכל שורה מתחיל מ-0). הקודקוד העליון של משולש זה מכיל

תרגיל 5 (המשך) פתרון: #include <stdio.h> #define ARR_SIZE 20 /*Pascal Triangle -prints a pascal triangle Parameters: nLines - bottom line level */ void pascalTri(int nLines) { int arr[ARR_SIZE+1] = {0}; int i, level; /*Check if level is in array bounds:*/ if (nLines >= ARR_SIZE) return; for (level = 0; level <= nLines; level++) /*Set the last number in level to 1:*/ arr[level] = 1;

תרגיל 5(המשך)

תרגיל 5 (המשך)