תרגול 5 1 1 Introduction to C - Fall 2010 - Amir Menczel.

Slides:



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

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
1 תרגול 4 – פונקציות מבוא למדעי המחשב/מבוא לתכנות מערכות – סמסטר א' תשע"א.
תכנות תרגול 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, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
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 } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
עקרון ההכלה וההדחה.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 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];
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
מחרוזות – הטיפוס String
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב לתעשייה וניהול
Tirgul 12 Trees 1.
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
מצביעים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
פונקציות קרן כליף.
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
פונקציות קרן כליף.
Computer Programming Summer 2017
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
תיכון אהל שם, רמת גן קורס PHP – הרצאה מס' 10
שאלות מבחינות קודמות יואב ציבין.
תוכנה 1 תרגול 13 – סיכום.
מבוא למדעי המחשב תרגול 4 – פונקציות.
מבוא למדעי המחשב תרגול 4 – פונקציות.
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Presentation transcript:

תרגול 5 1 1 Introduction to C - Fall 2010 - Amir Menczel

היום בתרגול מה הן פונקציות הגדרת פונקציה, קריאה לפונקציה העברת ארגומנטים, החזרת ערך או void דוגמאות

מוטיבציה לעיתים, אנו נזקקים לבצע פעולה מסוימת או לעשות חישוב מסוים מס' רב של פעמים. במקום לשוב ולכתוב את הקוד מס' רב של פעמים, ניתן לכתוב פונקציה שעושה את הפעולה הרצויה ולקרוא לפונקציה זו בכל פעם שרוצים להשתמש בה. כבר ראינו את השימוש בפונקציה Math.abs()

מבנה של פונקציה public static <return type> <func name> (<arg1_type> <arg1>, <arg2_type> <arg2>, …) { <function body> } חתימה של פונקציה מורכבת משם הפונקציה ומרשימת טיפוסי הארגומנטים שהפונקציה מקבלת (מספר, סוגי טיפוסים וסדר). הערך המוחזר וכן מאפיינים נוספים של פונקציה )כגון public ו- static ) אינם נכללים בחתימה של הפונקציה. לכל שתי פונקציות בתכנית חתימה שונה public static int foo(int num){…} public static int foo(int num1, double num2){…} public static int foo(double num){…} public static double foo(int num){…} √ X

ערך החזרה של פונקציה יש פונקציות שלא צריכות להחזיר ערך, אלא רק לבצע משהו (למשל פונקציה שמדפיסה מערך). במצב כזה נכתוב מילה void בתור <return value type>. פונקציה שמחזירה ערך חייבת להכיל את הפקודה <value>” “return )פעם אחת או יותר).

דוגמא להגדרה ושימוש בפונקציות: 6

end int sum int lastInd int i int 1 sum int sum int public class Sum { public static void main(String[] args) { int lastInd = 10; int sum = sumNums(lastInd ); System.out.println(“The sum of numbers from 1 to “+ lastInd + “ = “ + sum); System.out.println(“The sum of numbers from 1 to “+ 8 + “ = “ + sumNums(8)); } // returns the sum of numbers from 1 to end public static int sumNums(int end) { int sum = 0; for(int i = 1; i <= end; i = i+1) sum = sum + i; return sum; sumNums(10) end int 10 main sum int 1 55 lastInd int 10 i int 1 sum int 55 sum int

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

תרגיל 1 - פתרון public static void printArray(int[] arr) { for(int i=0; i < arr.length; i=i+1) { System.out.print(arr[i]+” ”); } System.out.println();

תרגיל 2 חישוב המקדם הבינומי המציין את מספר תתי הקבוצות בגודל k , של קבוצה בגודל n. עליכם לכתוב את הפונקציה nChooseK: public class BinCoeff { public static void main(String[] args) { int n = 5 , k = 3; System.out.print("The number of different subsets of size " + k + " in a set of size " + n + " is: "); System.out.println(nChooseK(n,k)) ; } … /* output : The number of different subsets of size 3 in a set of size 5 is: 10 */

תרגיל 2 - פתרון // Assumes that n>=0 public static int factorial(int n) { int result = 1; for(int i=2; i <= n; i = i+1) { result = result * i; } return result; public static int nChooseK(int n, int k) { int ans = 0; if (n>=k && k>=0) { ans = factorial(n) / (factorial(k) * factorial(n-k)); return ans;

תרגיל 3 כתבו פונקציה המקבלת מחרוזת s, מספר שלם i, ומחרוזת sub, הפונקציה מחזירה מחרוזת שבה "מושתלת" המחרוזת sub בתוך s החל מהאינדקס i. public static String insertSubstring(String s, int i, String sub) { { 12

תרגיל 3 - פתרון public static String insertSubstring(String s, int i, String sub) { if (s == null || sub == null || i < 0 || i >= s.length()) return null; String ans = s.substring(0,i) + sub + s.substring(i); return ans; { 13

תרגיל 4 מערך דו-ממדי נקרא מטריצה אם אינו ריק ואם כל שורותיו שוות באורכן ואורך זה גדול מאפס. השלימו את הגדרת השיטה הסטטית checkMatrix(int[][] m), אשר בודקת אם מערך דו-מימדי, m, הינו מטריצה ומחזירה ערך בוליאני בהתאם. הערה: אם קוראים לשיטה עם פרמטר שערכו null, על השיטה להחזיר את הערך false. בכל ריבוע ריק יש להשלים הוראה יחידה )כלומר לא יופיע בו (";". && 14

תדפיס: true false לשם הבהרה, השיטה :main public static void main (String[] args){ int[] line1 = {1,2,3,4}; int[] line2 = {5,6,7,8}; int[] line3 = {9}; int[] line4 = new int[0]; int[][] m1 = {line1,line2}; int[][] m2 = {line1,line2,line3}; int[][] m3 = null; int[][] m4 = {null,null}; int[][] m5 = {line4,line4}; int[][] m6 = {line2,null}; int[][] m7 = new int[0][0]; System.out.println(checkMatrix(m1)); System.out.println(checkMatrix(m2)); System.out.println(checkMatrix(m3)); System.out.println(checkMatrix(m4)); System.out.println(checkMatrix(m5)); System.out.println(checkMatrix(m6)); System.out.println(checkMatrix(m7)); } תדפיס:   true false

(m[i]!=null && m[0].length==m[i].length) תרגיל 4 - פתרון (m!=null && m.length>0 && m[0]!=null && m[0].length>0); tmp && i<m.length && (m[i]!=null && m[0].length==m[i].length) 16

תרגיל 5 נתונה הפונקציה public static int oddGCD(int m, int n) לחישוב המחלק המשותף המקסימלי (gcd) של שני מספרים שלמים m ו- n .שיטה זו פועלת נכון רק במקרה ולפחות אחד המספרים הינו אי-זוגי. השלימו את הגדרת השיטה הבאה, תוך שימוש בשיטה oddGCD הנתונה, כך שתחשב את המחלק המשותף המקסימאלי עבור כל שני שלמים אי-שליליים (הניחו כי לפחות אחד המספרים אינו אפס.( בפתרון שתציעו אין לבצע כל בדיקה על ערכו של משתנה פרט לבדיקה האם הוא זוגי או לא. כמובן שניתן גם להשתמש בפעולות לוגיות כמו (!, &&, ||). ניתן להניח שהקלט הינו חוקי (כלומר ש- n ו- m אי-שליליים ולפחות אחד מהם חיובי ממש).   public static int generalGCD(int m, int n) { // השלימו } רמז: gcd(x∙y, x∙z) = x∙gcd(y,z) 17

תרגיל 5 - פתרון public static int generalGCD(int m, int n) { int multiply = 1; while( (m % 2 == 0) && (n % 2 == 0) { multiply = multiply * 2; m = m / 2; n = n / 2; } return multiply * oddGCD(m, n);

תרגיל 6 נאמר ששני מספרים טבעיים חיוביים הם זרים אם אין להם מחלק משותף (פרט ל- 1). נתונה לכם שיטה סטטית public static int gcd (int m, int n) אשר מחזירה את המחלק המשותף הגדול ביותר של שני מספרים טבעיים חיוביים. השלימו את השיטה checkGCD(int[] a) אשר מחזירה ערך בוליאני המציין האם מערך a מקיים אחת משתי התכונות הבאות: א. כל שני מספרים שונים ב- a זרים. ב. כל שני מספרים שונים ב-a אינם זרים.   למשל: האוסף 4,7,25 מקיים את תכונה א' האוסף 6,10,15 מקיים את תכונה ב', למרות שאין שום מספר גדול מ- 1 המחלק את שלושת המספרים. האוסף20,7,20 מקיים את תכונה א' כי רק 7 ו- 20 שונים והם זרים. האוסף4,7,28 אינו מקיים אף אחת משתי התכונות. הפעלתcheckGCD על שלושת המערכים הראשונים מחזירה true. ואילו על הרביעי false -. יש להניח שבמערך יש לפחות שני מספרים שונים זה מזה. תוכלו גם להניח שכל המספרים הנתונים הם חיוביים, אך שימו לב שיתכן ואינם שונים זה מזה. 19

תרגיל 6 - פתרון public static boolean checkGCD(int[] a){ boolean aliens = true; // each 2 are aliens boolean notAliens = true; // each 2 are not aliens for (int i = 0; i < a.length – 1 && (aliens || notAliens); i=i+1){ for (int j = i+1; j < a.length && (aliens || notAliens); j=j+1){ if (a[i] != a[j]) { if (gcd(a[i], a[j]) == 1) notAliens = false; else aliens = false; } return aliens || notAliens;

תרגיל 7 כתבו פונקציה המקבלת מערך של מחרוזות המייצגות קבצים files, מחרוזת extension, ומחרוזת נוספת newExtension, על הפונקציה לשנות את כל הסיומות של הקבצים המסתיימות ב-extension ל-newExtension ולהחזיר מערך של הקבצים לאחר השינוי. לדוגמא: עבור הקבצים: a.txt b.rar c.rar d.txt e.rar המחרוזת: “rar” והמחרוזת להחלפה: “zip” נקבל מערך: a.txt b.zip c.zip d.txt e.zip הערה: הניחו כי בשם הקובץ מופיע נקודה אחת בלבד. 21

תרגיל 7 - פתרון public static String[] replaceExtensions(String[] files, String extension, String newExtension) { String [] ans = new String[files.length]; for (int i = 0; i < files.length; i++) ans[i] = files[i].replaceAll("."+extension, "."+newExtension); return ans;