פונקציות תכנות בשפת סי תרגול 6.

Slides:



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

Lecture 09 Strings, IDEs. METU Dept. of Computer Eng. Summer 2002 Ceng230 - Section 01 Introduction To C Programming by Ahmet Sacan Mon July 29, 2002.
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 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 הבית הורוד כתובת.
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 תרגול
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
תכנות תרגול 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 תרגול
תכנות תרגול 5 שבוע : לולאות for לולאות for for (counter=1 ;counter
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 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
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
לולאות 02 יולי יולי יולי 1502 יולי יולי יולי 1502 יולי יולי יולי 15 1 Department of Computer Science-BGU.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Sscanf example #include int main () { char sentence []="Rudolph is 12 years old"; char str [20]; int i; sscanf (sentence,"%s %*s %d",str,&i); printf ("%s.
תכנות תרגול 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.
Data Type string #include // C++ String class string str1, str2; // Default constructor cin >> str1 >> str2; cout
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
Dynamic Allocation. Malloc - Reminder void* malloc(unsigned int nBytes); Used to dynamically allocate nBytes in memory Returns a pointer to the allocated.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
 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);
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב סיבוכיות.
מצביעים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
Computer Programming תרגול 6 פונקציות
Engineering Programming A
פונקציות קרן כליף.
מבוא כללי למדעי המחשב פונקציות
מבוא כללי למדעי המחשב תרגול 4
Computer Programming Fall 2012 תרגול 6 פונקציות
Computer Programming תרגול 6 פונקציות
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

פונקציות תכנות בשפת סי תרגול 6

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

פונקציות - חזרה הכרזה והגדרה של הפונקציה: ●הכרזה (אבטיפוס של הפונקציה = function prototype): ; (return-type function-name(arguments declaration ●הגדרה: return-type function-name(arguments) {function body}   Formal parameters     לפני השימוש בפונקציה חייבים להכריז או להגדיר את הפונקציה! ערך מוחזר: void/non-void type העברת ארגומנטים: הערכים של הפרמטרים האקטואלים actual parameters)) מועתקים לפרמטרים הפורמאלים (formal parameters )ובכך הפונקציה מקבלת את הארגומנטים שלה. זכרו שאין השפעה על הפרמטרים האקטואלים!!!

פונקציות - דוגמה כתוב פונקציה המחשבת ומחזירה את המספר הגדול ביותר בין שלושת המספרים השלמים המועברים לפונקציה כפרמטרים: #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;

פונקציות - דוגמה נשתמש בפונקציה max3 . #include<stdio.h> כתוב תוכנית הקולטת עשרה שלשות של מספרים שלמים, מחשבת ומדפיסה את המספר הגדול ביותר בין כל המספרים הנקלטים. נשתמש בפונקציה max3 . #include<stdio.h> #define N 10 int max3(int,int,int); //function prototype void main() { int a,b,c; //input variables int max10; //the biggest value int i; //loop variable for(i=0;i<N;i++) { printf ("enter 3 integers : "); scanf("%d%d%d",&a,&b,&c); if(i==0) max10=max3(a,b,c); else if(max3(a,b,c)>max10) max10=max3(a,b,c);} printf ("max10= %d\n",max10); } /*Here we will place the function definition of max3*/

דוגמאות למימוש הפונקציות לטיפול במחרוזות: #include <stdio.h> /****************************************************************** int strlen (char s[]); Finds length of string Parameters: s - array of chars Returns: length of string that s holds *******************************************************************/ int strlen(char s[]) { int i = 0;   while (s[i]) i++; return i; } /******************************************************************* int strcmp (char s[], char t[]);  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; return s[i] - t[i];

דוגמה לשימוש בפונקציות בשימוש במחרוזות (המשך) /******************************************************************* char *strcpy (char dest[], const char src[]); Copies the string pointed to by src (including the terminating ‘\0' character) to the string pointed to by dest. The strings may not overlap, and the destination string dest must be large enough to receive the copy. Returns: the destination string *******************************************************************/ char *strcpy(char dest[], const char src[]) { int i; for (i = 0; dest[i] = src[i]; i++); return dest; }

תרגיל 1 כתוב תוכנית הקולטת ציונים שקיבלו 100 סטודנטים בקורס תכנות בשפת סי. התוכנית מחשבת ומדפיסה את המספר הסידורי של הסטודנט שקיבל ציון גבוה מהציון הממוצע. שים לב: שימוש בפונקציות בתרגיל זה מאפשר לראות איך אפשר לשלב שלבי פיתוח של אלגוריתם לתוכנית בשפת סי. פתרון: #include<stdio.h> #define NUM_STUD 100 /******** Function prototypes *********/ void inputGrades(int [],int); int avg(int [], int); void bestStud(int [],int,int); void main() { int grades[NUM_STUD];//data array int 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 m[],int num) { int i; //loop variable for(i=0;i<num;i++) printf("Enter %d student mark -> ", i+1); scanf("%d", &m[i]); } int avg(int m[], int num) int sum=0; // sum of grades int i;//loop variable for (i=0;i<num;i++) sum=sum+m[i]; return sum/num; void bestStud(int m[],int av, int num) if(m[i]>av) printf("The best student number is %d\n",i+1);

תרגיל 2 כתוב תכנית הקולטת משפט (המילים במשפט מופרדות ברווח אחד בלבד) ומחשבת ומדפיסה את מספר המילים במשפט. . numWordsעליך להיעזר בפונקציה פתרון: #include<stdio.h> #include<string.h> int numWords(char []);//function prototype void main() { char sent[256];//input sentence puts("Enter the sentence :"); gets(sent); printf("Number of words is %d\n“ , numWords(sent)); } int numWords(char b[])//function definition int i; //loop variable int num=0; //number of words do{ if (b[i]==' ') num++; } while(b[i]); return ++num;

תרגיל 3 פתרון: #include <stdio.h> כתוב תוכנית הממיינת מספרים שלמים במערך נתון לפי סדר עולה. עליך להתשמש בשיטת מיון selection sort. בשפת סי מעבירים מערך לפונקציה לפי שיטה call by reference (העברה לפי כתובת ), כלומר את כל השינויים שהפונקציה מבצעת על האלמנטים של המערך היא מבצעת על האלמנטים המקוריים של המערך בזיכרון המחשב בגלל ששם המערך שמעובר כפרמטר הוא הכתובת של האיבר הראשון של המערך. הרעיון הבסיסי הוא למצוא בכל שלב את האיבר הגדול ביותר ולהשים אותו בסוף. פתרון: #include <stdio.h> #define ARR_DEF {7,2,8,1,5,6,4} /*FUNCTION PROTOTYPES:*/ /*(1) sort elements of the array arr of size size in an increasing order. */ void selectionSort(int arr[], int size); /*(2) swap elements of arr with index x,y*/ void swap(int arr[], int x, int y); /*(3) find the index of the largest element of arr between positions 0.. size-1*/ int indexOfLargest(int arr[], int size); /*(4) print the array arr */ void printArray(int arr[], int size);

/*IMPLEMENTATION:*/ int main() { int arr[] = ARR_DEF ; selectionSort(arr,7); printArray(arr, 7); } void selectionSort(int arr[], int size) int i; printArray(arr, size); /*Print the array before the sort:*/ for (i = size - 1; i >= 0; i--) swap(arr, indexOfLargest(arr, i + 1), i); printArray(arr, size); /*Print the array after the sort:*/ void printArray(int arr[], int size) for(i = 0; i < size; i++) printf("%d ",arr[i]); putchar('\n'); void swap(int arr[], int idx1, int idx2) { int tmp; tmp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = tmp; } int indexOfLargest(int arr[], int size) int i; int idxLargest = 0; for (i = 1; i < size; i++) if (arr[idxLargest] < arr[i]) idxLargest = i; return idxLargest;

תרגיל 4 פתרון: כתוב תוכנית הקולטת לשני מערכים מספרים שלמים. התוכנית מבצעת מיזוג של שני מערכים לתוך מערך שלישי (בהנחה שהוא מספיק גדול). התוכנית שומרת על הסדר המקורי שהיה בין כל שני איברים שמקורם באותו מערך. התוכנית דואגת לכך שאם שני המערכים המקוריים היו ממויינים, גם המערך שמכיל את המיזוג שלהם יהיה ממוין. #include <stdio.h> #define MAX 100 /*This function merges two arrays without changing the order between elements in that come from the same array.*/ void merge(int arr1[], int n1, int arr2[], int n2, int res[]) { int i, j, k; for (i=j=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 may be true (or neither)*/ while(i < n1) res[k++] = arr1[i++]; while(j < n2) res[k++] = arr2[j++]; }

תרגיל 4 (המשך) void main() { int n1, n2, i; תרגיל 4 (המשך) void main() { int n1, n2, i; int a1[MAX], a2[MAX], a3[MAX * 2]; printf("Number of values for 1st array: "); scanf("%d", &n1); for (i = 0; i < n1; ++i) printf("Value %d: ", i+1); scanf("%d", &a1[i]); } printf("Number of values for 2nd array: "); scanf("%d", &n2); for (i = 0; i < n2; ++i) scanf("%d", &a2[i]); merge(a1, n1, a2, n2, a3); for (i = 0; i < n1 + n2; ++i) printf("%4d", a3[i]); printf("\n");

תרגיל 5 פתרון: גרסת bubble sort למערך של מחרוזות: כתוב תוכנית הקולטת מספר מחרוזות וממיינת אותם לפי סדר לקסיקוגרפי. נממש בשיטת מיוןbubble sort (מיון בועות) – האלגוריתם הזה מסדר תווים במחרוזת לפי סדר עולה. עליך להשתמש בתרגיל זה בפונקציות ספריה string.h הבאות: strcmp() ו- strcpy() . #include <stdio.h> #include <string.h> #define MAX 100 #define STRLEN 32 void bubble(char vals[][STRLEN], int n) { int i, j; char temp[STRLEN]; for (i = 0; i < n-1; ++i) for (j = 0; j < n-1-i; ++j) if (strcmp(vals[j],vals[j+1]) > 0) strcpy(temp,vals[j]); strcpy(vals[j],vals[j+1]); strcpy(vals[j+1],temp); } פתרון:

תרגיל 5 (המשך) void main() { int n, i; char vals[MAX][STRLEN]; printf("Enter the desired number of strings (maximum %d strings): ",MAX); scanf("%d", &n); getchar();/*Get the '\n' character.*/ printf("Now enter the %d strings (each one should be no longer than %d characters): \n",n,STRLEN-1); for (i = 0; i < n; ++i) printf("String %d= ", i+1); gets(vals[i]); } bubble(vals, n); printf("%s\n", vals[i]);

תרגיל 5 (המשך) int main() { int temp; char str1[10]="mice"; char str2[10]="nice"; char str3[10]; printf("the length of \"%s\" is %d\n", str1,strlen(str1)); strcpy(str3,str2); printf("str3 is now equal to \"%s\"\n", str3); temp=strcmp(str1,str3); if (temp<0) printf("\"%s\" comes before \"%s\" in a dictionary\n", str1, str3); else printf("\"%s\" does not come before \"%s\" in a dictionary\n", str1, str3); }

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

תרגיל 6 (המשך) פתרון: #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] = {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;

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

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

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

תרגיל 7 - פתרון #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"); }

תרגיל 7 – פתרון (המשך) /********************* 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