תכנות תרגול 8 שבוע : 18.12.05. מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.

Slides:



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

מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
מבוא למדעי המחשב תרגול 2 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 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, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מבוא כללי למדעי המחשב שיעור 5
תכנות – שיעור 7. חזרה -מערכים נגדיר בעזרתו קבוצת משתנים כאשר יהיה לנו מספר רב של משתנים זהים נגדיר בעזרתו קבוצת משתנים כאשר יהיה לנו מספר רב של משתנים.
תכנות תרגול 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
תכנות תרגול 14 שבוע : רשימות מקושרות ישנו מבנה נתונים אשר מאפשר ישנו מבנה נתונים אשר מאפשר לנו לבצע את הוספת האיברים בצורה נוחה יותר. מבנה זה.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
תכנות תרגול 12 שבוע : הקצאת זיכרון דינאמית הזיכרון המקסימאלי ששימש את התוכנית שלנו עד היום היה קבוע מראש. לפני הרצת התוכנית, לאחר שהתוכנית עברה.
תכנות תרגול 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 דוא " ל :
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב תרגול 7. מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
תכנות תרגול 12 שבוע : מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
מבוא למדעי המחשב תרגול 5 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב תרגול 12 – הקצאת זיכרון דינאמית שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב סיבוכיות.
שיעור חמישי: מערכים ומחרוזות
מצביעים קרן כליף.
קורס תכנות – סמסטר ב' תשס"ח
מצביעים קרן כליף.
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
מבוא כללי למדעי המחשב תרגול 6
מחרוזות קרן כליף.
מערכים של מצביעים הקצאה דינאמית
תירגול 8:מצביעים והקצאה דינאמית
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Presentation transcript:

תכנות תרגול 8 שבוע :

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

הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת : רחוב קוקוריקו 3 מה הכתובת של “ הבית האדום ?” 2 מי גר בבית מספר 2? רמי יוסי שמעון אבנר רמי מי גר ב “ בית האדום ?” רמי

כתובת : 2000 מה הכתובת של ?a 2000 מה נמצא בתא 2000? a מה נמצא ב a? 5 5 b c d כתובת : 1000 כתובת : 3000 כתובת : 4000

מצביעים לכל משתנה שמוגדר בתוכנית יש כתובת לכל משתנה שמוגדר בתוכנית יש כתובת הכתובת שלו היא מיקומו בזכרון הכתובת שלו היא מיקומו בזכרוןלמשל כאשר משכנים מספר מסוג int אזי צורכים 4 bytes. int a; a 5000

מצביעים int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; a 5000 b p p *p1 = 2; *p2 = *p1;

מצביעים ופונקציות עד היום הפונקציות שלנו ידעו לקבל ערכים של משתנים ולהשתמש בהם הן לא ידעו לקבל משתנים ולשנות את הערכים שלהם ( מלבד פונקציה אחת !) הפונקציות שלנו ימשיכו לקבל ערכים בלבד רק שכעת אנו יכולים להעביר להם בתור ערך כתובת של משתנה !

5 3 printf 3 a b 2034 int a=3,b=5; printf(“%d %d”,a,b) אין צורך לדעת את כתובותיהם של a ואת b, אלא רק את ערכיהם

scanf a 2020 b 2034 int a,b; scanf(“%d %d”,&a,&b) צריך לדעת את כתובותיהם של a ו b, ולא את ערכיהם 3 5

int main() { int a; scanf(“%d”,&a); } a 5000 scanf *pa = ערך מהמשתמש

void swap (int* q,int* p) { int temp = *p; *p = *q; *q = temp; } int main() { int a=10,b=2,x=3,y=5;  swap(&x,&y);  swap(&a,&b); } x 5000 y p 7026 q temp 3 5 3

הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו יש כתובת a[0] a[1] a[2] a[9]  כדי להגיע לכתובת של תא במערך פשוט נכתוב &a[2] אם נרצה את הכתובת של המערך עצמו אזי זה שם המערך

הקשר בין מערכים לפונקציות כיצד נכתוב פונקציה אשר תקבל כפרמטר מערך ? הפונקציה תקבל מערך ( את כתובתו ) ותדפיס אותו : void PrintArray(int a[],int size) { int i; for (i=0;i<size;i++) printf(“%d”,a[i]);}

הקשר בין מערכים לפונקציות הפונקציה תקלוט איברים לתוך מערך void GetArray(int a[],int size) { int i; for (i=0;i<size;i++) scanf(“%d”,&a[i]);}

void PrintArray(int a[],int size); int main() { int a[SIZE]; GetArray(a,SIZE); PrintArray(a,SIZE); return 0; } void GetArray(int a[],int size);

תרגיל 2 כתבו את הפונקציות הבאות : פונקציה שממלא מערך במספרים אקראיים פונקציה שממלא מערך במספרים אקראיים פונקציה שמדפיסה מערך פונקציה שמדפיסה מערך פונקציה שהופכת את המערך ( רמז : השתמשו בפונקציה swap ) פונקציה שהופכת את המערך ( רמז : השתמשו בפונקציה swap )

פתרון מילוי מערך void fill_array(int array[], int size) { int i; srand(time(NULL)); for (i = 0; i < size; i++) array[i] = rand()/327; }

פתרון הדפסת מערך void print_array(int array[], int size) { int i; for (i = 0; i < size; i++) printf("%d ", array[i]); printf("\n"); }

פתרון הפיכת מערך void reverse_array(int array[], int size) { int i; for (i = 0; i < size/2; i++) swap(&array[i], &array[size i]); }

#include #define SIZE 5 void fill_array(int array[], int size); void reverse_array(int array[], int size); void print_array(int array[], int size); void swap(int *a, int *b); int main() { int my_arr[SIZE]; fill_array(my_arr, SIZE); print_array(my_arr, SIZE); reverse_array(my_arr, SIZE); print_array(my_arr, SIZE); return 0; }

חשבון מצביעים a[0] a[1] a[2] a[9]  כדי להגיע לתא השלישי במערך נוכל לעשות a[2] או*(a+2)

void reverse_array(int *begin, int *end) { while (begin < end) { swap(begin, end); begin++; end--; } reverse_array(my_arr, my_arr + SIZE -1); חשבון מצביעים beginend ae e a d r

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

קלט פלט &a[4] a b

int *findSubArray (int *array, int array_size, int *sub_array, int sub_size) { int i, j; for (i = 0; i <= array_size - sub_size; i++,array++) { for (j = 0; j < sub_size; ++j) if ( *(array + j) != sub_array[j] ) break; if (j == sub_size) return array; } return NULL; }

#include #include int *findSubArray (int *array, int array_size, int *sub_array, int sub_size); int main() { int array1[] = {1, 45, 67, 1001, -19, 67, 89, 1004, -867, 34, 3, -1900, 10029}, array2[] = {34, 3, -1900}, *position; array2[] = {34, 3, -1900}, *position; position = findSubArray (array1, sizeof (array1) / sizeof (int), array2, sizeof (array2) / sizeof(int)); array2, sizeof (array2) / sizeof(int)); printf ("array2 appears in array1 starting from place : %d.\n", (position == NULL)? -1 : position - array1 + 1); return 0; }

מחרוזות מחרוזת – מחרוזת זה מערך של תווים אשר מסתיים ב ‘\0’. a[0] a[1] a[2] a[3] a[4] a[5] ‘S’ ‘h’ ‘a’ ‘i’ ‘\0’ char a[6] = “Shai”; printf(“%s”,a); הדפסה באמצעות %s

מחרוזות הסיום ב ‘\0’ מאפשר לנו להעביר מחרוזות לפונקציות מבלי לציין את גודלם !!! פונקציה טיפוסית של מחרוזות תראה כך : void string_func(const char *s) { … while (*s != ’\0’) … { מונע שינוי של המחרוזת

#include #include int strlen (const char * str) { const char *eos = str; const char *eos = str; while( *eos++ ) ; while( *eos++ ) ; return( eos - str - 1 ); return( eos - str - 1 );} int main() { char str[]="Shai"; printf("%d",strlen(str)); return 0; } מה קורה פה ? NUXIL‘\0’ str eos

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

קלט פלט &a[4] a b

int *findSubArray(int *array, int array_size, int *sub_array, int sub_size) { int i, j; for (i = 0; i <= array_size - sub_size; i++) { for (j = 0; j < sub_size; j++) if ( *(array + i + j) != sub_array[j] ) break; if (j == sub_size) return array+i; } return NULL; return NULL;}

נניח שהמערכים הם מחרוזות ! אפשר להעביר לפונקציה רק מצביע לתחילת המערך ( המחרוזת ) אפשר להעביר לפונקציה רק מצביע לתחילת המערך ( המחרוזת ) int *findSubArray(int *array, int array_size, int *sub_array, int sub_size) for (i = 0; i <= array_size – sub_size; i++) { for (j = 0; j < sub_size; j++) if ( *(array + i + j) != sub_array[j]) break; if (j == sub_size) return array+i; } while (*cp)

#include #include char * strstr ( char * str1, char * str2) { char *cp = str1; char *cp = str1; char *s1, *s2; char *s1, *s2; if ( !*str2 ) if ( !*str2 ) return(str1); return(str1); while (*cp) while (*cp) { s1 = cp; s1 = cp; s2 = str2; s2 = str2; while ( *s1 && *s2 && !(*s1-*s2) ) while ( *s1 && *s2 && !(*s1-*s2) ) s1++, s2++; s1++, s2++; if (!*s2) if (!*s2) return(cp); return(cp); cp++; cp++; } return(NULL); return(NULL);} void main() { char s1[]="I am a boy"; char s2[]="am"; printf("%s", strstr(s1,s2)); } בדיקת תת המחרוזת נניח שהמערכים הם מחרוזות !

תרגיל כתוב פונקציה לחישוב כמה מילים נמצאות בתוך מחרוזת רמז : המילים מופרדות על ידי רווחים ניתן להשתמש בפונקציה isspace(char c) שנמצאת ב #include ב #include

int word_cnt (const char *s) { int cnt = 0; const char *next = s + 1; if (*s == '\0') /*empty string*/ return 0; while(*next != '\0') { if (!isspace(*s) && isspace(*next)) cnt++;s++;next++;} if (!isspace(*s)) cnt++; return cnt; }

דרכים נוספות להגדיר מחרוזות h p ello\0 hello s char *p = “hello”; char s[ ] = “hello”; קלט למחרוזת scanf(“%s”, str); gets(str); עד לרווח עד לאנטר