Computer Programming Summer 2017

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

רזח יליגרתו םי יראני ב ם

מבוא לתכנות ב- JAVA תרגול 6

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

מבוא לתכנות ב- JAVA תרגול 5. Ipc161- practical session 5

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> }

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

תרגילים ופתרונות בשפת - C הסתעפויות

Algorithms. Intro2CS week 5

מבוא למדעי המחשב תרגול 13: עצים בינאריים

Engineering Programming A

מבוא לתכנות ב- JAVA תרגול 7

חוברת תרגילים לתרגול יסודות התכנות

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

Practical Session No. 14 Topological sort,amortized Analysis

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

Introduction to Programming in C תרגול 8

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

מבוא לתכנות ב- JAVA מעבדה 2

הנכות 1 םוכיס לוגרת 13 1

Graph Database, think different!

מבוא למדעי המחשב תרגול 5: לולאות ומערכים

הנכות 1 תואיגש םע תודדומתהו תואלול,םי : כרעמ 2 לוגרת

תרגול מספר 3: מערכים

תוכנה 1 תרגול 2: מערכים ומבני בקרה

פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות

הנכות 1 תואיגש םע תודדומתהו תואלול,םיכרעמ : לו 2 גרת

מבוא למדעי המחשב תירגול 3:

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2

תכנות מתקדם בשפת C משתנים

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

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

הנכות 1 םוכיס לוגרת 14 1

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Loop through Arrays. Array Creation and Initialization

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen

Computer Programming A תרגול 9

סכום (סדרת ערכים) אחרת - דוגמא: סכום-ספרות (num) אם < 10 num החזר 1 או אם = 0 = num החזר 0 public static int numofdigits (int num)

תרגילים ופתרונות בשפת C

שאלה 1 מהו הפלט של התוכנית הבאה:

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Array Creation and Initialization. Loop through Arrays

תוכנה 1 3 תרגול מס' מערכים ומבני בקרה

Programming in C תרגול 8

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf("bla\n"); 8. return 0; 9. }

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C

Practical Session - Heap

מבוא לתכנות ב- JAVA מעבדה 4

הנכות 1 םוכיס לוגרת 13 1

Amortized Analysis, Union-Find,

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א'

תוכנה 1 תרגול 2: מערכים, מבני בקרה ושגיאות

Exams questions examples

$ gcc check.c. $ a.out. $ gcc check.c -o check. $ check. $ gcc -Wall check.c -o check. #include <stdio.h>

תרגול 3 מערכים ופונקציות

Programming for Engineers in Python

Programming for Engineers in Python

תזכורת: עץבינארי מבוא למדעי המחשב הרצאה 24: עצי חיפוש בינאריים

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים

תוכנה 1 טיפוסי השפה טיפוסים לא פרימיטיביים הטיפוסים הפרימיטיביים מחרוזות המרה למספרים תרגול 2: טיפוסי שפה, מחרוזות, מערכים ושגיאות

תוכנה 1 * לא בהכרח בסדר הזה

קורס תכנות שיעור שני: שימוש במשתנים,

הנכות 1 םוכיס לוגרת 13 1

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון.

תוכנה 1 סמסטר א' תשע"א

תרגול 3 מערכים ופונקציות

תרגול 6 רקורסיה ותכנות מונחה עצמים

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3

עמוד 1 (תאריך ( âùéä ער äìàù בכל השאלות ניתן להניח שהקלט תקין. 100 íåëñ חורף :

הפלט אחרי הביצוע של ההוראה :what3(root)

Tutorial 10. Introduction to C++ שימו

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator

מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א. I x > a. פתרון 2: משפט switch

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes

הקלחמ ה תמרב ת ונ וכ ת (static members ) יליזרב דהוא Java תפשב ם דקת מ תונכת ביבא ל ת תטיסרבינוא

תוכנה 1. תרגול 1: סביבת העבודה ומבוא ל- Java

ספרית התבניות הסטנדרטית (STL) כתיבת אלגוריתמים גנריים מצביעים חכמים. .vector. list iterator נכיר תחילה את האוסף הפשוט ביותר בספריה

תרשים המחלקות ותרשים העצמים

קורס תכנות כתובות בזיכרון כתובות בזכרון מצביעים וכתובות מצביעים וכתובות שיעור שביעי: מבנים, הקצאת זיכרון דינאמית האופרטור &

קורס תכנות שיעור שישי: מחרוזות, מצביעים

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13

לאחר הרצת התכנית יופיע בחלון הoutput הפלט הבא: run: ******************************* *****Welcome to Java!***** *******************************

מבוא למדעי המחשב 2018 תרגול 7

במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן

תוכנה 1 תרגול מספר 10: תרגיל חזרה חברת הייטק בית הספר למדעי המחשב אוניברסיטת תל אביב

<exp> ::= <define> <cexp> <define> ::= ( define <var-decl> <cexp> ) / DefExp(var:VarDecl, val:cexp)

INDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR Stamp / Signature of the Invigilator

מחרוזות ב Java ותכנות מונחה בדיקות )Test Driven Development(

תוכנה 1 * לא בהכרח בסדר הזה

תרגול 7 רשימות משורשרות, רקורסיית

מבוא למדעי המחשב תרגול 12 מחסנית )Stack( memoization

מבוא לתכנות מערכות מבחן מועד א' סמסטר חורף

9. טופס הזמנת מוצרים טופס ההזמנה הוא טופס מורכב. מעורבים בו 4 טבלאות נתונים. קשרי הגומלין בין הטבלאות : הטופס :

תכנות מונחה עצמים משחקים תשע"ו

AMCAT Automata Coding Sample Questions And Answers

Decision Making and Loops

Classification s of Data Structures

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

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

ASP.Net Web API.

פתרון מוצע לבחינה בשפת C של מה"ט מועד אביב תשע"ז, פברואר 2017 מחבר: מר עסאקלה שאדי, מכללת אורט בראודה

Transcription:

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

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

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

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

פונקציות - דוגמה כתוב תוכנית הקולטת 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++) scanf("%d%d%d",&a,&b,&c); if (max3(a,b,c)>max) max= max3(a,b,c); printf ("max= %d\n",max); /*Here we will place the implementation of max3*/

העברת ארגומנטים הערכים המועברים אל הפונקציה כפרמטרים מועתקים. לכן, כל שינוי שהפונקציה תבצע בארגומנטים לא ישתקף מחוץ לפונקציה עצמה. void swap(int x, int y) int temp = x; x = y; y = temp; void main() int a = 1, b = 2; swap(a, b); printf( a=%d b=%d\n, a, b); פלט: a=1 b=2

העברת ארגומנטים )המשך( לעומת זאת, אם מעבירים לפונקציה מערך, כל שינוי בתוך המערך עצמו יישמר גם לאחר סיום ריצת הפונקציה. void swap(int arr[], int i, int j) int temp = arr[i] arr[i] = arr[j]; arr[j] = temp; void main() int a = 1, 2; swap(a, 0, 1); printf( a[0]=%d a[1]=%d\n, a[0], b[1]); פלט: 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 סטודנטים בקורס תכנות בשפת סי. התוכנית ומדפיסה את המספר הסידורי של הסטודנטים שקיבלו ציון גבוה מהציון הממוצע.

תרגיל 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 *********/ 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) int i;//loop variable for(i=0; i<size; i++) if (arr[i]>av) printf("the best student number is %d\n",i+1);

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

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

תרגיל 3 תוכנית הקולטת מספרים שלמים לתוך שני מערכים. אפשר להניח שהמשתמש מכניס מספרים כך שכל מערך ממוין. התוכנית מבצעת מיזוג של שני מערכים לתוך מערך שלישי, כך שהוא יכיל את איברי שני המערכים וגם יהיה ממוין. #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) 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 מערך דו מימדי כפרמטר 0 0 3 0 2 0 2 1 0 0 2 3 1 4 8 11 0-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 return FALSE;

תרגיל 4 )המשך( מערך דו מימדי מוגדר כמערך פרחוני בריבוע אם הוא פרחוני והוא מכיל לפחות פרח בריבוע אחד. פרח בריבוע הוא פרח שכל אחד מ 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 return FALSE;

תרגיל 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 )המשך(