תרגול 8 תחומי הכרה פונקציות

Slides:



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

מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
מחרוזות נכתב ע " י כרמי גרושקו. כל הזכויות שמורות © 2010 הטכניון, מכון טכנולוגי לישראל 1.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
1 מבוא למדעי המחשב משתנים. 2  סוגי משתנים בשפת C  ההבדלים בין סוגי המשתנים השונים.
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
מבוא כללי למדעי המחשב תרגול. הבית האדום כתובת : רחוב קוקוריקו 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 מצביעים כמערכים דוגמה.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
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, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא ידעו.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
A. Frank File Organization Hardware Size Parameters.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב תרגול 5 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
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 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
Kashrut is a mitzvah in the Torah and has been passed on through generations. Kashrut is a chok. this means that we don’t know why we do it but we.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב לתעשייה וניהול
Tirgul 12 Trees 1.
מבוא למדעי המחשב סיבוכיות.
מערכים ומצביעים הקצאה דינאמית של מערכים דו-מימדיים
מיונים וחיפושים קרן כליף.
מצביעים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
מבוא למדעי המחשב הרצאה 5: תחומי הכרה של משתנים
מבוא כללי למדעי המחשב תרגול 6
שאלות מבחינות קודמות יואב ציבין.
Programming in C תרגול Introduction to C - Fall Amir Menczel.
תוכנה 1 תרגול 13 – סיכום.
תירגול 8:מצביעים והקצאה דינאמית
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Presentation transcript:

תרגול 8 תחומי הכרה פונקציות נכתב ע"י כרמי גרושקו. כל הזכויות שמורות © 2010 הטכניון, מכון טכנולוגי לישראל

ולמה משתנים גלובליים וסטטים הם דבר מסוכן תחומי הכרה ולמה משתנים גלובליים וסטטים הם דבר מסוכן

תזכורת (תחומי הכרה) משתנים "לוקליים אוטומטיים" (רגילים). int main() { int a, i; for( i=0; i<a; i++ ) int m = (l+r)/2; printf( "%d %d", m, a ); } return 0; משתנים "לוקליים אוטומטיים" (רגילים). קיימים+נגישים בבלוק שבו הוכרזו, ובבלוקים מוכלים. לא מאותחלים במשתמע; יכילו זבל ללא אתחול מפורש. פרמטרים של פונקציות (בתוך הפונקציות) הם משתנים לוקליים אוטו' לכל צורך פרקטי משתנים גלובליים קיימים+נגישים בכל מקום (החל מהכרזתם) מאותחלים במשתמע להיות 0. האתחול חייב להיעשות לערך קבוע וידוע מראש (כמו במקרה של גודל מערך) int g; void f() { printf( "%d", g ); } int main() scanf( "%d", &g ); f(); return 0; הכוונה ב-"קיימים" - שומרים את ערכם הקודם.

תזכורת (תחומי הכרה) משתנים "לוקליים סטטים". נגישים בבלוק שבו הוכרזו, ובבלוקים מוכלים. קיימים לכל אורך ריצת התכנית. מאותחלים במשתמע להיות 0. האתחול חייב להיעשות לערך קבוע וידוע מראש (כמו במקרה של גודל מערך) void f() { static int a = 1; printf( "%d ", a++ ); } int main() f(); return 0; הכוונה ב-"קיימים" - שומרים את ערכם הקודם.

תרגיל 1א (בוחן, אביב תש"ע) כמה כוכביות ? int main() { f1(10); f1(20); #define N 20   int arr[N] = {0, 19, 2, 21, 4, 23, 6, 25, 8, 27, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}; int i = 0; void g(void) { i += 2; } כמה כוכביות ? void f1(int n) { int i = 0;   for ( ; (i < n) && (i < N); i++) if (arr[i]%2) printf("*"); g(); } התשובה היא 15 int main() { f1(10); f1(20); return 0; }

תרגיל 1ב (בוחן, אביב תש"ע) כמה כוכביות ? int main() { f2(10); f2(20); #define N 20   int arr[N] = {0, 19, 2, 21, 4, 23, 6, 25, 8, 27, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}; int i = 0; void g(void) { i += 2; } כמה כוכביות ? void f2(int n) { static int i = 0;   for ( ; (i < n) && (i < N); i++) if (arr[i]%2) printf("*"); g(); } התשובה היא 10 int main() { f2(10); f2(20); return 0; }

תרגיל 1ג (בוחן, אביב תש"ע) כמה כוכביות ? int main() { f3(10); f3(20); #define N 20   int arr[N] = {0, 19, 2, 21, 4, 23, 6, 25, 8, 27, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}; int i = 0; void g(void) { i += 2; } כמה כוכביות ? void f3(int n) { for ( ; (i < n)&&(i < N); i++) int i = 0;   if (arr[i]%2) printf("*"); g(); } התשובה היא 0 int main() { f3(10); f3(20); return 0; }

תרגיל 1ד (בוחן, אביב תש"ע) כמה כוכביות ? void f4(int n) { #define N 20   int arr[N] = {0, 19, 2, 21, 4, 23, 6, 25, 8, 27, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}; int i = 0; void g(void) { i += 2; } כמה כוכביות ? void f4(int n) { for ( ; (i < n)&&(i < N); i++) if (arr[i]%2) printf("*"); g(); } התשובה היא 5 int main() { f4(10); f4(20); return 0; }

תרגיל 2 מה התכנית הבאה תדפיס ? void f(int x) { x = 4; } int main() f(x); printf( "%d", x ); return 0; התשובה היא 9

תרגיל 3 מה התכנית הבאה תדפיס ? void f(int x) { x = 4; } int main() f(x[0]); printf( "%d", x[0] ); return 0; התשובה היא 9 - x[0] הוא משתנה רגיל; זה לא משנה שהוא חלק ממערך.

תרגיל 4 מה התכנית הבאה תדפיס ? void f(int x[]) { x[0] = 4; } int main() int x[10] = {9}; f(x); printf( "%d", x[0] ); return 0; התשובה היא 4

תרגיל 5 (מועד א', חורף תשס"ט) מהו הפלט של התכנית הבאה? int g(int * x) { *x-=8; return 7; } int f(int x) g(&x); printf("%d",x); return 5; int main() { int x=9; f(x); printf("%d",x); return 0; } הפלט הוא 19

פונקציות תרגילים

תרגיל 6 – משולש שווה-שוקיים כתבו תכנית המדפיסה משולש כמו בתמונה. [שווה-שוקיים[ void rep_print(char c, int count) { while( count-- > 0 ) printf( "%c", c ); } int main() int i; for( i=1; i<=SIZE; i+=2 ) rep_print( ' ', (SIZE-i)/2 ); rep_print( '*', i ); printf( "\n" ); return 0;

תרגיל 7 (מועד א', אביב תש"ע, 234112) בהינתן מערך a עם n איברים המיוצג באופן הבא: אזי העברת האיבר האחרון לראשית תקרא "הזזה ציקלית באחד": למשל: a[0] a[1] a[2] a[3] …… a[n-2] a[n-1] a[n-1] a[0] a[1] a[2] …… a[n-3] a[n-2] 2 5 8 -43 -43 2 5 8

תרגיל 7א (מועד א', אביב תש"ע, 234112) כתבו פונקציה המקבלת שני מערכים a ו-b, את אורכם n, ומשתנה k, מחזירה 1 אם המערך b מתקבל לאחר k "הזזות ציקליות באחד" של המערך a ו-0 אחרת. int is_cyclic( int a[], int b[], int n, int k ) { int i; for( i=0; i<n; i++ ) if( a[i] != b[(i+k)%n] ) return 0; return 1; } עד עכשיו, היינו משתמשים ב- #define N <?>. מעכשיו, יש לנו פרמטר.

תרגיל 7ב (מועד א', אביב תש"ע, 234112) כתבו פונקציה המקבלת שני מערכים a ו-b, את אורכם n, מחזירה את מספר "ההזזות הציקליות באחד" שעל a לעבור כדי להפוך ל-b, אם ניתן; אחרת, -1. int cyclic_number( int a[], int b[], int n ) { int i; for( i=0; i<n; i++ ) if( is_cyclic( a, b, n, i ) return i; return -1; }

תרגיל 8א כתבו פונקציה המקבלת unsigned int ומחזירה את ההיפוך שלו: 234111 => 111432 unsigned int reverse( unsigned int n ) { unsigned int res = 0; while( n ) res = res*10 + n%10; n /= 10; } return res;

תרגיל 8ב כתבו פונקציה המקבלת unsigned int ומכריעה אם הוא פלינדרום (מספר "סימטרי" - 12321, 99499 וכו'.) int is_palindrome( unsigned int n ) { return reverse(n) == n; }

תרגיל 9 כתבו פונקציה המקבלת מערך (ואת אורכו) ומחזירה את האינדקס שבו נמצא האיבר המקסימלי (במקרה של תיקו, החזירו אחד מהם). unsigned get_max_idx( int a[], int length ) { unsigned max_idx = 0, i; for( i=1; i<length; i++ ) if( a[i] > a[max_idx] ) max_idx = i; return max_idx; }

תרגיל 10 כתבו פונקציה המקבלת שני מערכים (ואת אורכיהם) וקובעת אם אחד מהם הוא תת מערך של השני (מותר שוויון). אם הראשון תת-מערך של השני, החזירו 1. אם השני תת-מערך של הראשון, החזירו 2. אם שני התנאים הקודמים נכונים (במקרה של שוויון), החזירו 3. אם אף אחד מהתנאים לא נכון, החזירו -1. 43 1 -4 17 2 54 1 -4 17

למה לא מעבירים את אורכי שני המערכים ? תרגיל 10 ראשית נכתוב פונקציה שבהנתן שני מערכים, קובעת אם הם זהים: int is_equal_arrays( int a[], int b[], int n ) { int i; for( i=0; i<n; i++ ) if( a[i] != b[i] ) return 0; return 1; } למה לא מעבירים את אורכי שני המערכים ?

תרגיל 10 (המשך) נכתוב פונקציה הבודקת אם המערך a הוא תת-מערך של b. int is_sub_array( int a[], int b[], int na, int nb ) { if( na < nb ) int i; for( i=0; i<=nb-na; i++ ) if( is_equal_arrays( a, b+i, na ) ) return 1; return 0; }

תרגיל 10 (המשך) אם מערך אחד ארוך מהשני, בהכרח הוא לא תת-מערך שלו. אם שני המערכים באורך זהה, רק צריך לבדוק אם הם זהים. דמיינו איך התכנית היתה נראית ללא שימוש בפונקציות... int is_any_subarray( int a[], int b[], int na, int nb ) { if( na == nb ) return is_equal_arrays( a, b, na ) ? 3 : -1; if( na < nb ) return is_sub_array( a, b, na, nb ) ? 1 : -1; else return is_sub_array( b, a, nb, na ) ? 2 : -1; }